如何:设置和获取命令对象的参数
如果要使用命令对象对数据库执行命令,所执行的 SQL 语句或存储过程常常需要参数。 例如,需要参数的简单“更新”(Update) 语句可能为如下样子:
UPDATE Employees
SET LastName = @LastName, FirstName = @FirstName, BirthDate = @BirthDate
WHERE (EmployeeID = @EmployeeID)
当执行此语句时,必须为所有参数(@LastName、@FirstName、@BirthDate 和 @EmployeeID)提供值。 若要这样做,可使用参数对象。 命令对象支持参数集合(例如 Parameters),该集合中包含一组类型为 SqlParameter、OleDbParameter、OdbcParameter 或 OracleParameter 的对象。 对于需要传递的每个参数,集合中均有一个对应的参数对象。 此外,如果要调用存储过程,可能需要一个附加参数来接受过程的返回值。
备注
如果正在使用数据集,通常不直接执行命令。而是将参数传递给 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();
获取返回值
存储过程常常将值传递回调用这些过程的应用程序。
获取过程返回的值
创建一些参数,将它们的 Direction 属性设置为 Output 或 InputOutput(如果该参数在过程中既用于接收值也用于发送值)。 确保参数的数据类型与预期的返回值匹配。
执行过程后,读取所传递回参数的 Value 属性。
获取过程的返回值
创建一些参数,将它们的 Direction 属性设置为 ReturnValue。
备注
返回值的参数对象必须是参数集合中的第一项。
确保参数的数据类型与预期的返回值匹配。
备注
“更新”、“插入”和“删除”SQL 语句返回一个整数值,指示受该语句影响的记录数。可以 ExecuteNonQuery 方法的返回值的形式获取该值。有关更多信息,请参见使用存储过程修改数据。
下面的示例演示如何获取名为 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());