[ADO.NET 3.5] 使用 DbCommandBuilder 自動取得預存程序參數
Introduction
使用 ADO.NET 處理資料時,當呼叫預存程序,若是需要傳入參數時,通常我們就會建立並且增加相對應的參數;
不只增加程式碼的撰寫,也可能因為欄位的設定錯誤,造成不必要的困擾;若是使用 DbCommandBuilder 可以幫
助取得參數,開發上也方便多了。
Example
sample1 不使用 DbCommandBuilder
預存程序
create PROCEDURE InsertDept (
@DeptName nvarchar(20)
)
As
insert into dept (DeptName) values (@DeptName)
RETURN scope_Identity()
呼叫 InsertDetp 預存程序
using (SqlCommand cmd = new SqlCommand())
{
//設定連線
cmd.Connection = cn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "InsertDept";
//設定參數
cmd.Parameters.Add(new SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int));
cmd.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue;
cmd.Parameters["@RETURN_VALUE"].Value = null;
cmd.Parameters.Add(new SqlParameter("@DeptName", SqlDbType.NVarChar));
cmd.Parameters["@DeptName"].Value = txtDepName.Text;
//開啟連線
cn.Open();
//執行 command
cmd.ExecuteNonQuery();
}
sample2 使用 DbCommandBuilder
using (SqlConnection cn = new SqlConnection(cnStr)) {
//開啟連線,SqlCommandBuilder.DeriveParameters 會先去抓參數
cn.Open();
//command 設定預存程序與連線
using (SqlCommand cmd = new SqlCommand("Sales by Year", cn)) {
cmd.CommandType = CommandType.StoredProcedure;
//抓取預存程序參數
SqlCommandBuilder.DeriveParameters(cmd);
//直接設定值給參數
cmd.Parameters["@DeptName"].Value = "test";
cmd.ExecuteNonQuery();
}
}
}
Link
http://www.davidhayden.com/blog/dave/archive/2006/11/01/SqlCommandBuilderDeriveParameters.aspx
SqlCommandBuilder..::.DeriveParameters 方法
三小俠 小弟獻醜,歡迎指教