Я просто сталкиваюсь с какой-то странной проблемой, когда я не могу получить значение параметра хранимой процедуры sql. Я столкнулся с этой проблемой почти 2 часа.Проблема при считывании параметра из хранимой процедуры с использованием C#
код очень прост
using (var con = new SqlConnection(connectionString))
{
con.Open();
SqlCommand cmd = new SqlCommand("sp_mgsearach", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param1 = new SqlParameter("@SearchTerm", SqlDbType.VarChar);
param1.Value = searchTerm;
param1.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param1);
SqlParameter param2 = new SqlParameter("@start", SqlDbType.Int);
param2.Value = start;
param2.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param2);
SqlParameter param3 = new SqlParameter("@end", SqlDbType.Int);
param3.Value = end;
param3.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param3);
SqlParameter param4 = new SqlParameter("@total", SqlDbType.Int);
param4.Direction = ParameterDirection.InputOutput;
param4.Value = 0;
cmd.Parameters.Add(param4);
var reader = cmd.ExecuteReader();
LoadHits(reader);
if (lstHits.Count > 0)
total = Convert.ToInt32(cmd.Parameters["@total"].Value);
else
total = 0;
}
@total значение всегда нуль. Но когда я выполняю запрос, сгенерированный через профилировщик в анализаторе запросов, он возвращает штраф.
Наконец-то я нашел, что это связано с SQL-соединением.
Он отлично работает, если я закрыть соединение перед чтением затраченного Param
LoadHits(reader);
con.close()
if (lstHits.Count > 0)
total = Convert.ToInt32(cmd.Parameters["@total"].Value);
else
total = 0;
WT .., я просто не могу понять, почему он ведет себя так, как это .. кто-нибудь есть идеи?