I would like to get a value of an output parameter of a stored procedure, but I'm getting +1 all the time. When obtaining a value by return everything's ok.
I managed to obtain a value of the output parameter using Entity Framework, however, it works really slowly. I'm attaching my stored procedure and C# code used to get the values from the stored procedures.
Stored procedure with an output parameter works fine in SQL Server.
Does someone have any idea why my code doesn't work?
Thanks for your help in advance.
Stored procedure:
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# code for stored procedure with and output parameter which uses Entity Framework and works, but it's slow:
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# code for stored procedure with and output parameter which doesn't work:
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;
}
}
This code gets return value and works:
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());
}
}