C#中存储过程的返回值返回错误

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();,我仍然得到相同的错误.

Ali*_*tad 5

更改

 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)