kin*_*005 1 c# t-sql sql-server sql-server-2005 visual-studio
我试图在SQL Server 2005中检索存储过程的返回值,如下所示:
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();
Run Code Online (Sandbox Code Playgroud)
但是,当调用ExecuteNonQuery()时,我得到一个OleDbException,说:"过程或函数myStoredProcedure指定的参数太多了." 我的存储过程开始如下:
ALTER PROCEDURE [dbo].[spTabtempTestsINSERT]
(
@Param1 char (64),
@Param2 char (128),
@Param3 char (64),
)
AS
BEGIN
Declare @TestID int
Run Code Online (Sandbox Code Playgroud)
并以以下结尾:
RETURN @TestID
END
Run Code Online (Sandbox Code Playgroud)
声明返回值而不是作为参数传递这一事实是否与它有关?如果是这样,我怎样才能获得存储过程开始后声明的参数的返回值?谢谢你的帮助.
更新:我已经尝试了目前为止建议的更改,我添加了以下行:
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();
Run Code Online (Sandbox Code Playgroud)
现在当ExecuteScalar()执行时,我得到一个NullReferenceException,其Object引用未设置为对象的实例.
注意:我也尝试将其设置为整数int testID = (int)comm.ExecuteScalar();,我仍然得到相同的错误.
更改
comm.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
至
int returnValue = (int) comm.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
并删除:
comm.Parameters.Add("@TestID", OleDbType.Integer).Direction = ParameterDirection.ReturnValue;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7862 次 |
| 最近记录: |