[英]Why a SqlParameter does not get value?
I am trying to initialize the value of a SqlParameter
with a string.我正在尝试用字符串初始化
SqlParameter
的值。 but why does it not get the value ?但为什么它没有得到值?
This is what I tried:这是我尝试过的:
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;
}
}
The stored procedure:存储过程:
alter procedure sp_Arsenic_getSourceStatusCount
@status varchar(10),
@count int
as
select @count=COUNT(status) from Arsenic_WaterSource where status=@status
return 1
Inserting a breakpoint I have discovered that the string variable status
gets its value "safe" but at parameters[0].Value = (string) status;
插入断点 我发现字符串变量
status
获得它的值“安全”但在parameters[0].Value = (string) status;
line parameters[0].value
gets null
.行
parameters[0].value
获取null
。 How to resolve this issue ?如何解决这个问题?
You did not define your @count parameter as an OUTPUT parameter in your procedure:您没有在程序中将 @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
Try this:尝试这个:
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;
And this:和这个:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.