您的位置:首页 > 产品设计 > UI/UE

SqlParameter设定的value值为0时、调用的存储过程获取到的值却为null解决方法

2015-09-16 10:07 651 查看
原C#代码如下:

if (query != null)
{
switch (query.MethodFlag)
{
//进出口退补税额统计表
case (int)EnumClassifyCorrectionRSTMethodFlags.CCRSTStatistial:
paras[0] = new SqlParameter("reportType", 0);
sqlWhere += "BASETYPE=0";
break;
case (int)EnumClassifyCorrectionRSTMethodFlags.CCCustomDistrictStruct:
paras[0] = new SqlParameter("reportType", 2);
sqlWhere += "BASETYPE=2";
break;
//环节
case (int)EnumClassifyCorrectionRSTMethodFlags.CCCorrectionStateStatistial:
paras[0] = new SqlParameter("reportType", 3);
sqlWhere += "BASETYPE=3";
break;
//章节
case (int)EnumClassifyCorrectionRSTMethodFlags.CCCHAPTERStatistial:
paras[0] = new SqlParameter("reportType", 4);
sqlWhere += "BASETYPE=4";
break;
//类
case (int)EnumClassifyCorrectionRSTMethodFlags.CCCATEGORYStatistial:
paras[0] = new SqlParameter("reportType", 5);
sqlWhere += "BASETYPE=5";
break;
//大类
case (int)EnumClassifyCorrectionRSTMethodFlags.CCBIGCATEGORYStatistial:
paras[0] = new SqlParameter("reportType", 6);
sqlWhere += "BASETYPE=6";
break;
case (int)EnumClassifyCorrectionRSTMethodFlags.CCAffiliatedCustomDistrictStruct:
paras[0] = new SqlParameter("reportType", 7);
sqlWhere += "BASETYPE=7";
break;
default:
result = false;
break;
}
string strWhere = GetStrWhere(query, ref sqlWhere,ref monthCount);

paras[1] = new SqlParameter("strWhere", strWhere);
paras[2] = new SqlParameter("sqlWhere", sqlWhere    );

paras[3] = new SqlParameter("reportCount", Convert.ToInt32(monthCount));

paras[4] = new SqlParameter("RecordCount", query.SumRecordsCount);
paras[4].Direction = ParameterDirection.Output;


在调用存储过程的时候发现int类型的参数paras[0]和paras[4]在赋给其值为0的情况下变成了null。

解决方案:

paras[0] = new SqlParameter("reportType", Convert.ToInt32(0));
paras[3] = new SqlParameter("reportCount", Convert.ToInt32(monthCount));
paras[4] = new SqlParameter("RecordCount", query.SumRecordsCount);//返回参数,可以为null,所以此处没做修改
paras[4].Direction = ParameterDirection.Output;


value 参数中指定 Object 时,SqlDbType 将从 Object 的 .NET Framework 类型推断出。

请小心使用 SqlParameter 构造函数的这个重载来指定整数参数值。因为此重载接受 Object 类型的 value,所以当此值为零时,必须将整数值转换为 Object 类型,如下面的 C# 示例所示。

Parameter = new SqlParameter("@pname", Convert.ToInt32(0));


如果不执行该转换,则编译器将认为您尝试调用 SqlParameter(string、 SqlDbType)构造函数重载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: