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

时间:2012-11-07 08:42:16

标签: c# sql-server ado.net

我有SQL Server Stored Procedure。此过程具有输出参数。 在我的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;
            }
        }

我的c变量始终返回0.任何想法?在此先感谢:)

我的程序是这样的:

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

3 个答案:

答案 0 :(得分:7)

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

更改

spParameter[2].Direction = ParameterDirection.ReturnValue; 

 spParameter[2].Direction = ParameterDirection.Output;

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

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

答案 1 :(得分:4)

您必须将ParameterDirection.Output用于参数c。 见Get output parameter value in ADO.NET

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

答案 2 :(得分:0)

SqlHelper.ExecuteDataSet不返回输出参数。看到这个链接

http://www.mediachase.com/documentation/fileuploader/Api/Mediachase.FileUploader.SqlHelper.ExecuteDataset_overload_5.html

用于使用ExecuteNonQuery的每个示例中的输出参数 请参阅这些aticles以获取输出参数

http://forums.asp.net/t/360456.aspx/1

http://www.codeproject.com/Articles/15666/Data-Access-Application-Block-NET-2-0-Get-Return-V

我希望它可以帮助你