简体   繁体   English

为什么 SqlParameter 没有得到值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM