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)
@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)