Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用SqlHelper.ExecuteDataSet()执行SQL Server存储过程并获取返回值_C#_Sql Server_Ado.net - Fatal编程技术网

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

C# 使用SqlHelper.ExecuteDataSet()执行SQL Server存储过程并获取返回值,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我有一个SQL Server存储过程。此过程有一个输出参数。 在我的C#.NETAppliaction上,我通过SqlHelper.ExecuteDataSet()执行这个过程,它返回一个查询结果DataSet。 使用SqlHelper.ExecuteDataSet()时,如何从存储过程中获取输出参数。 一些文章说我需要使用SqlHelper.ExecuteNonQuery(),但我也需要DataSet 这是我的代码: public DataSet GetDataPerTable

我有一个
SQL Server存储过程
。此过程有一个输出参数。 在我的
C#.NET
Appliaction上,我通过
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;
            }
        }
My
c
变量始终返回0。有什么想法吗?提前感谢:)

我的程序是这样的:

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

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

改变

spParameter[2].Direction = ParameterDirection.ReturnValue; 

另外,在调用
ExecuteDataset
例如:


对于参数
c
,必须使用
ParameterDirection.Output
。 看


ParameterDirection.ReturnValue
是整个存储过程的返回值,默认为0或在return语句中指定的值。

SqlHelper.ExecuteDataSet不返回输出参数。请参阅此链接

对于每个示例中的输出参数,它们都使用ExecuteOnQuery 有关输出功率表,请参见这些图表


我希望它能帮助你

我把我的存储过程脚本放在那里:)@WillyLazuardi是的-它肯定是一个输出,而不是返回值。
 spParameter[2].Direction = ParameterDirection.Output;
DataSet dataset = SqlHelper.ExecuteDataset(Configuration.MyConnectionString, CommandType.StoredProcedure, spName, spParameter);
c=(int)spParameter[2];
return dataset;