如何:设置和获取命令对象的参数

如果要使用命令对象对数据库执行命令,所执行的 SQL 语句或存储过程常常需要参数。例如,需要参数的简单“更新”(Update) 语句可能为如下样子:

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

当执行此语句时,必须为所有参数(@LastName、@FirstName、@BirthDate 和 @EmployeeID)提供值。若要这样做,可使用参数对象。命令对象支持参数集合(例如 Parameters),该集合中包含一组类型为 SqlParameterOleDbParameterOdbcParameterOracleParameter 的对象。对于需要传递的每个参数,集合中均有一个对应的参数对象。此外,如果要调用存储过程,可能需要一个附加参数来接受过程的返回值。

说明说明

如果正在使用数据集,通常不直接执行命令。而是将参数传递给 TableAdapter 查询,有关更多信息,请参见如何:使用数据填充数据集

设置参数值

在执行命令以前,必须为命令中的每个参数设置值。

设置参数值

  • 为命令的参数集合中的每个参数设置 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 属性设置为 Output 或 InputOutput(如果该参数在过程中既用于接收值也用于发送值)。确保参数的数据类型与预期的返回值匹配。

  2. 执行过程后,读取所传递回参数的 Value 属性。

获取过程的返回值

  1. 创建一些参数,将它们的 Direction 属性设置为 ReturnValue。

    说明说明

    返回值的参数对象必须是参数集合中的第一项。

  2. 确保参数的数据类型与预期的返回值匹配。

    说明说明

    “更新”、“插入”和“删除”SQL 语句返回一个整数值,指示受该语句影响的记录数。可以 ExecuteNonQuery 方法的返回值的形式获取该值。有关更多信息,请参见Specifying Parameters and Return Values

下面的示例演示如何获取名为 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());

请参见

任务

如何:创建和执行返回行的 SQL 语句

如何:创建和执行返回单个值的 SQL 语句

如何:创建和执行不返回值的 SQL 语句

如何:执行返回行的存储过程

如何:执行返回单个值的存储过程

如何:执行不返回值的存储过程

概念

将数据获取到应用程序

Using Parameters with a DataAdapter

Specifying Parameters and Return Values