使用SqlHelper.ExecuteDataSet()和获取返回值执行SQL Server存储过程

Wil*_*rdi 2 c# sql-server ado.net

我有一个SQL Server Stored Procedure.此过程具有输出参数.在我的C#.NETAppliaction上,我通过执行此过程SqlHelper.ExecuteDataSet()并返回查询结果DataSet.如何在使用时从存储过程过程中获取输出参数SqlHelper.ExecuteDataSet().有些文章说我需要使用,SqlHelper.ExecuteNonQuery()但我也需要DataSet.

这是我的代码:

        public DataSet GetDataPerTable(string spName, string a, string b, out int c)
        {
            try
            {
                c = 0;

                SqlParameter[] spParameter = new SqlParameter[3];

                spParameter[0] = new SqlParameter("@a", SqlDbType.Char, 4);
                spParameter[0].Direction = ParameterDirection.Input;
                spParameter[0].Value = a;

                spParameter[1] = new SqlParameter("@b", SqlDbType.Char, 1);
                spParameter[1].Direction = ParameterDirection.Input;
                spParameter[1].Value = b;

                spParameter[2] = new SqlParameter("@c", SqlDbType.Int);
                spParameter[2].Direction = ParameterDirection.ReturnValue;                
                c = Convert.ToInt32(spParameter[2].Value);

                return SqlHelper.ExecuteDataset(Configuration.MyConnectionString, CommandType.StoredProcedure, spName, spParameter);
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }
Run Code Online (Sandbox Code Playgroud)

我的c变量总是返回0.任何想法?提前致谢 :)

我的程序是这样的:

CREATE PROCEDURE [dbo].SPR_MyProcedure (@a Char(4), @bChar(1), @c Int Output)  
SELECT * 
FROM MyTable
Set @c = 1
Run Code Online (Sandbox Code Playgroud)

pod*_*ska 7

@c 不是返回值,它是输出参数

更改

spParameter[2].Direction = ParameterDirection.ReturnValue; 
Run Code Online (Sandbox Code Playgroud)

 spParameter[2].Direction = ParameterDirection.Output;
Run Code Online (Sandbox Code Playgroud)

此外,您需要c在调用后设置变量,ExecuteDataset 例如:

DataSet dataset = SqlHelper.ExecuteDataset(Configuration.MyConnectionString, CommandType.StoredProcedure, spName, spParameter);
c=(int)spParameter[2];
return dataset;     
Run Code Online (Sandbox Code Playgroud)