共用方式為


HOW TO:設定及取得命令物件的參數

更新:2007 年 11 月

如果使用命令物件針對資料庫執行命令,所執行的 SQL 陳述式或預存程序通常需要設定參數。例如,需要參數的簡單 Update 陳述式,外觀可能如下所示:

UPDATE Employees
SET LastName = @LastName, FirstName = @FirstName, BirthDate = @BirthDate
WHERE (EmployeeID = @EmployeeID)

當您執行這個陳述式時,必須提供所有參數的值 (@LastName、@FirstName、@BirthDate 和 @EmployeeID)。若要這麼做,可使用參數物件。命令物件支援參數集合 (例如,Parameters),其中包含一組下列型別的物件:SqlParameterOleDbParameterOdbcParameterOracleParameter。在集合中,每個需要傳遞的參數都有一個參數物件。另外,如果呼叫預存程序,您可能需要一個額外的參數以接受 (Accept) 程序的傳回值。

注意事項:

如果您正在使用資料集,一般而言,是不會直接執行命令,而是將參數傳遞至 TableAdapter 查詢,如需詳細資訊,請參閱 HOW TO:以資料填入資料集

設定參數值

在執行命令之前,必須為命令中的每個參數設定一個值。

若要設定參數值

  • 為命令的參數集合中每個參數,設定 Value 屬性。

    下列範例示範如何在執行參考預存程序的命令之前設定參數。這個範例假設您已經使用名稱為 au_id、au_lname 和 au_fname 的三個參數設定參數集合。以名稱來設定個別參數,是為了明確釐清哪個參數已經設定。

    With oleDbCommand1
        .CommandText = "UpdateAuthor"
        .CommandType = System.Data.CommandType.StoredProcedure
        .Parameters("au_id").Value = "172-32-1176"
        .Parameters("au_lname").Value = "White"
        .Parameters("au_fname").Value = "Johnson"
    End With
    
    OleDbConnection1.Open()
    oleDbCommand1.ExecuteNonQuery()
    OleDbConnection1.Close()
    
    oleDbCommand1.CommandText = "UpdateAuthor";
    oleDbCommand1.CommandType = System.Data.CommandType.StoredProcedure;
    
    oleDbCommand1.Parameters["au_id"].Value = "172-32-1176";
    oleDbCommand1.Parameters["au_lname"].Value = "White";
    oleDbCommand1.Parameters["au_fname"].Value = "Johnson";
    
    oleDbConnection1.Open();
    oleDbCommand1.ExecuteNonQuery();
    oleDbConnection1.Close();
    

取得傳回值

預存程序常將值傳回到呼叫它們的應用程式。

若要取得程序所傳回的值

  1. 建立其 Direction 屬性設定為 OutputInputOutput 的參數 (如果該參數在程序中同時用來接收和傳送值)。確定參數的資料型別與預期的傳回值相符。

  2. 在執行程序之後,讀取所傳回參數的 Value 屬性。

若要取得程序的傳回值

  1. 建立其 Direction 屬性設為 ReturnValue 的參數。

    注意事項:

    傳回值的參數物件必須是參數集合的第一個項目。

  2. 請確定參數的資料型別與預期的傳回值相符。

    注意事項:

    Update、Insert 和 Delete 三個 SQL 陳述式傳回整數值,指出受陳述式影響的資料錄筆數。您可以取得這個值做為 ExecuteNonQuery 方法的傳回值。如需詳細資訊,請參閱使用預存程序修改資料 (ADO.NET)

以下範例示範如何取得名為 CountAuthors 的預存程序之傳回值。在這個範例中,假設命令的參數集合的第一個參數命名為 "retvalue",而其方向設為 ReturnValue。

Dim returnValue As Integer

oleDbCommand1.CommandText = "CountAuthors"
oleDbCommand1.CommandType = CommandType.StoredProcedure

oleDbConnection1.Open()
oleDbCommand1.ExecuteNonQuery()
oleDbConnection1.Close()

returnValue = CType(oleDbCommand1.Parameters("retvalue").Value, Integer)
MessageBox.Show("Return Value = " & returnValue.ToString())
int returnValue;

oleDbCommand1.CommandText = "CountAuthors";
oleDbCommand1.CommandType = CommandType.StoredProcedure;

oleDbConnection1.Open();
oleDbCommand1.ExecuteNonQuery();
oleDbConnection1.Close();

returnValue = (int)(oleDbCommand1.Parameters["retvalue"].Value);
MessageBox.Show("Return Value = " + returnValue.ToString());

請參閱

工作

HOW TO:建立及執行傳回資料列的 SQL 陳述式

HOW TO:建立及執行傳回單一值的 SQL 陳述式

HOW TO:建立及執行未傳回值的 SQL 陳述式

HOW TO:執行傳回資料列的預存程序

HOW TO:執行傳回單一值的預存程序

HOW TO:執行未傳回值的預存程序

概念

DataAdapter 參數 (ADO.NET)

使用預存程序修改資料 (ADO.NET)

其他資源

將資料擷取至您的應用程式中