我想获得存储过程的输出参数的值,但我一直在获得+1。通过 return 获取值时一切正常。
我设法使用实体框架获得了输出参数的值,但是,它的工作速度非常慢。我附上了我的存储过程和用于从存储过程中获取值的 C# 代码。
带有输出参数的存储过程在 SQL Server 中运行良好。
有人知道为什么我的代码不起作用吗?
提前感谢您的帮助。
存储过程:
Create procedure sp_CountEachNumberOccurencesOutput
@number tinyint,
@count_number int output
As
SET NOCOUNT ON
select count(*)
from RawData
where Number1 = @number or Number2 = @number or Number3 = @number
select @count_number = count(*)
带有和输出参数的存储过程的 C# 代码,它使用实体框架并且可以工作,但是速度很慢:
using (SqlConnection cn = new SqlConnection(cnStr))
{
cn.Open();
using (SqlCommand cmd = new SqlCommand("sp_CountEachNumberOccurencesOutput", cn))
{
var outParam = new SqlParameter();
int outputValue = 0;
outParam.SqlDbType = SqlDbType.Int;
outParam.Direction = ParameterDirection.Output;
DbContext dbContext = new DbContext(this.connectionString);
var data = dbContext.Database.SqlQuery<int>("sp_CountEachNumberOccurencesOutput @number, @count_number OUT",
new SqlParameter("number", parameter),
new SqlParameter("count_number", outputValue),
outParam);
outputValue = data.ToList()[0];
return outputValue;
}
}
带有和输出参数的存储过程的 C# 代码不起作用:
using (SqlConnection cn = new SqlConnection(cnStr))
{
cn.Open();
using (SqlCommand cmd = new SqlCommand("sp_CountEachNumberOccurencesOutput", cn))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.Parameters.Add("@number", SqlDbType.Int);
param.Direction = ParameterDirection.Input;
param.Value = parameter;
SqlParameter outputParameter = cmd.Parameters.Add("@count_number", SqlDbType.Int);
outputParameter.Direction = ParameterDirection.Output;
outputParameter.Value = 0;
cmd.ExecuteNonQuery();
cn.Close();
int OutputValue = (int)cmd.Parameters["@count_number"].Value;
return OutputValue;
}
}
此代码获取返回值并有效:
using (SqlConnection cn = new SqlConnection(cnStr))
{
cn.Open();
using (SqlCommand cmd = new SqlCommand("sp_CountEachNumberOccurencesReturn", cn))
{
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.Parameters.Add("@number", SqlDbType.Int);
param.Direction = ParameterDirection.Input;
param.Value = parameter;
SqlParameter returnValue = new SqlParameter();
returnValue.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValue);
return Convert.ToInt32(cmd.ExecuteScalar());
}
}