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

更新:2007 年 11 月

如果要使用命令对象对数据库执行命令,所执行的 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 属性设置为 OutputInputOutput(如果该参数在过程中既用于接收值也用于发送值)。确保参数的数据类型与预期的返回值匹配。

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

获取过程的返回值

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

    说明:

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

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

    说明:

    “更新”、“插入”和“删除”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());

请参见

任务

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

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

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

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

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

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

概念

DataAdapter 参数 (ADO.NET)

使用存储过程修改数据 (ADO.NET)

其他资源

将数据获取到应用程序