SqlParameter设定的value值为0时、调用的存储过程获取到的值却为null解决方法
2015-09-16 10:07
651 查看
原C#代码如下:
在调用存储过程的时候发现int类型的参数paras[0]和paras[4]在赋给其值为0的情况下变成了null。
解决方案:
value 参数中指定 Object 时,SqlDbType 将从 Object 的 .NET Framework 类型推断出。
请小心使用 SqlParameter 构造函数的这个重载来指定整数参数值。因为此重载接受 Object 类型的 value,所以当此值为零时,必须将整数值转换为 Object 类型,如下面的 C# 示例所示。
如果不执行该转换,则编译器将认为您尝试调用 SqlParameter(string、 SqlDbType)构造函数重载。
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)构造函数重载。
相关文章推荐
- UIView添加手势,UIbutton不响应点击事件
- quick3.3中CCStore的使用
- UITextField常用属性及设置
- jsp中request.getParameter和request.getAttribute之间的区别
- leetcode 232 Implement Queue using Stacks(难易度:Easy)
- UIButton 不响应或延迟响应 UIControlEventTouchDown 事件的解决办法
- Android异步更新UI的方式之使用AsyncTask异步任务
- Algorithms - Week 4-0 Priority Queues
- UI:UITextView
- Algorithms - Week 3-1 Quicksort
- easyui在页面布局中引入外部的jsp页面,css冲突,功能失效,页面混乱
- 【J2ee】JSP request 内置函数的使用完全版
- crfsuit安装
- Find the longest substring with k unique distinct characters in a given string (Google)
- 关于 this android sdk requires android developer...错误的解决办法
- distinct sequence Google
- UITouch 触摸事件处理(实例)
- UI高级第二课  多线程和GCD——iOS学习连载30
- UI高级第一课  block语法——iOS学习连载29
- Java工程(3)——但从谈论用户的角度UI图案