我想如下检索存储过程在SQL Server 2005中的返回值:在C#中的存储过程的返回值返回错误
OleDbCommand comm = new OleDbCommand(process_name, connection);
comm.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < process_parameters.Length; i++)
comm.Parameters.AddWithValue(process_parameters[i].ParameterName, process_parameters[i].Value);
//Add output param
comm.Parameters.Add("@TestID", OleDbType.Integer).Direction = ParameterDirection.ReturnValue;
comm.ExecuteNonQuery();
当的ExecuteNonQuery()被调用,但是,我找回OleDbException说:“过程或函数myStoredProcedure指定的参数太多。”我的存储过程开始,如下所示:
ALTER PROCEDURE [dbo].[spTabtempTestsINSERT]
(
@Param1 char (64),
@Param2 char (128),
@Param3 char (64),
)
AS
BEGIN
Declare @TestID int
而且具有以下结尾:
RETURN @TestID
END
这是否将返回值声明,而不是作为一个参数传递的事实,有什么关系用它?如果是这样,我怎么能得到存储过程开始后声明的参数的返回值?谢谢你的帮助。
更新: 我试过到目前为止建议的修改,添加以下行:
OleDbCommand comm = new OleDbCommand(process_name, connection);
comm.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < process_parameters.Length; i++)
comm.Parameters.AddWithValue(process_parameters[i].ParameterName, process_parameters[i].Value);
var testID = (int)comm.ExecuteScalar();
现在,当ExecuteScalar()
被执行,我得到一个的NullReferenceException与对象引用不设置到对象实例。
注:我也尝试将其设置为一个整数int testID = (int)comm.ExecuteScalar();
,我仍然得到相同的错误。
如果存在实际上是一个OUTPUT参数在proc定义中,那么他可以使用ExecuteNonQuery并只读取新的参数值。但是,OP有点混乱 – NotMe 2010-11-24 23:10:46