練習 2:預存程序與使用區塊更新資料
示範如何呼叫預存程序,並使用強型別 DataSet 更新資料。
開啟 DataEx2.sln,預設路徑 C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Data Access\exercises\ex02\begin,編譯。
執行 SetUpEx02.bat(預設 C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Data Access\exercises\ex02\DbSetup),建立 Categories 資料表、GetCategories 預存程序並插入資料。預設伺服器 (local)\SQLEXPRESS。
開啟 MainForm.cs 設計檢視,應用程式選擇特定 Category 載入對應產品,允許修改並儲存。
MainForm.cs 程式碼,加入命名空間:using Microsoft.Practices.EnterpriseLibrary.Data;(先加入 Data 與 Common 組件參考)private Database _db = DatabaseFactory.CreateDatabase("QuickStarts Instance");MainForm_Load 加入代碼:private void MainForm_Load(object sender, System.EventArgs e)
{
this.cmbCategory.Items.Clear();
using (IDataReader dataReader = _db.ExecuteReader("GetCategories"))
{
while (dataReader.Read())
{
Category item = new Category(
dataReader.GetInt32(0),
dataReader.GetString(1),
dataReader.GetString(2));
this.cmbCategory.Items.Add(item);
}
}
if (this.cmbCategory.Items.Count > 0)
this.cmbCategory.SelectedIndex = 0;
}
Database.ExecuteReader 多載接受預存程序名稱字串,無需管理連線,using 區塊確保 DataReader 釋放並關閉連線。
cmbCategory_SelectedIndexChanged 加入代碼:private void cmbCategory_SelectedIndexChanged(object sender, System.EventArgs e)
{
this.dsProducts.Clear();
Category selectedCategory = (Category)this.cmbCategory.SelectedItem;
if (selectedCategory == null) return;
_db.LoadDataSet(
"GetProductsByCategory",
this.dsProducts,
new string[] { "Products" },
selectedCategory.CategoryId);
}
DAAB 提供 ExecuteDataSet(回傳新 DataSet)與 LoadDataSet(填充現有 DataSet)兩種方法。