[ADO.NET 3.5] 使用 DbCommandBuilder 自動取得預存程序參數

  • 3487
  • 0

[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 方法

SqlCommandBuilder 類別

設定參數和參數資料型別 (ADO.NET)

三小俠  小弟獻醜,歡迎指教