Почему SqlParameter не получает значение?
Я пытаюсь инициализировать значение SqlParameter
со строкой. но почему он не получает значение?
Вот что я попробовал:
int loadChart(string status)
{
connect();
SqlParameter[] parameters ={
new SqlParameter("status", SqlDbType.VarChar, 10),
new SqlParameter("count", SqlDbType.Int, 4)
};
parameters[0].Value = status;
parameters[1].Direction = ParameterDirection.Output;
SqlCommand cmd = new SqlCommand("sp_Arsenic_getSourceStatusCount", objConnection);
foreach (SqlParameter param in parameters)
{
cmd.Parameters.Add(param);
}
cmd.ExecuteNonQuery();
disConnect();
int count;
count =(int) parameters[1].Value;
return count;
}
}
Хранимая процедура:
alter procedure sp_Arsenic_getSourceStatusCount
@status varchar(10),
@count int
as
select @count=COUNT(status) from Arsenic_WaterSource where status=@status
return 1
Вставляя точку останова, я обнаружил, что строковая переменная status
получает значение "безопасно", но в parameters[0].Value = (string) status;
линия parameters[0].value
получает null
, Как решить эту проблему?
2 ответа
Вы не определили свой параметр @count в качестве параметра OUTPUT в своей процедуре:
alter procedure sp_Arsenic_getSourceStatusCount
@status varchar(10),
@count int OUTPUT /* <-------------- */
as
select @count=COUNT(status) from Arsenic_WaterSource where status=@status
return 1
Попробуй это:
connect();
SqlCommand cmd = new SqlCommand("sp_Arsenic_getSourceStatusCount", objConnection);
cmd.Parameters.Add(new SqlParameter("@status", status));
SqlParameter pCount = new SqlParameter("@count", 0);
pCount.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(pCount);
cmd.ExecuteNonQuery();
disConnect();
int count = Convert.ToInt32(parameters[1].Value);
return count;
И это:
alter procedure sp_Arsenic_getSourceStatusCount
@status varchar(10),
@count int = 0 OUTPUT
as
set nocount on
select @count=COUNT(status) from Arsenic_WaterSource where status=@status
go