我有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
答案 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不返回输出参数。看到这个链接
用于使用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
我希望它可以帮助你