zoukankan      html  css  js  c++  java
  • SqlParameter设定的value值为0时、调用的存储过程获取到的值却为null解决方法

    原C#代码如下:

     1 if (query != null)
     2             {
     3                 switch (query.MethodFlag)
     4                 {
     5                     //进出口退补税额统计表
     6                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCRSTStatistial:
     7                         paras[0] = new SqlParameter("reportType", 0);
     8                         sqlWhere += "BASETYPE=0";
     9                         break;
    10                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCCustomDistrictStruct:
    11                         paras[0] = new SqlParameter("reportType", 2);
    12                         sqlWhere += "BASETYPE=2";
    13                         break;
    14                     //环节
    15                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCCorrectionStateStatistial:
    16                         paras[0] = new SqlParameter("reportType", 3);
    17                         sqlWhere += "BASETYPE=3";
    18                         break;
    19                     //章节
    20                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCCHAPTERStatistial:
    21                         paras[0] = new SqlParameter("reportType", 4);
    22                         sqlWhere += "BASETYPE=4";
    23                         break;
    24                     //
    25                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCCATEGORYStatistial:
    26                         paras[0] = new SqlParameter("reportType", 5);
    27                         sqlWhere += "BASETYPE=5";
    28                         break;
    29                     //大类
    30                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCBIGCATEGORYStatistial:
    31                         paras[0] = new SqlParameter("reportType", 6);
    32                         sqlWhere += "BASETYPE=6";
    33                         break;
    34                     case (int)EnumClassifyCorrectionRSTMethodFlags.CCAffiliatedCustomDistrictStruct:
    35                         paras[0] = new SqlParameter("reportType", 7);
    36                         sqlWhere += "BASETYPE=7";
    37                         break;
    38                     default:
    39                         result = false;
    40                         break;
    41                 }
    42                 string strWhere = GetStrWhere(query, ref sqlWhere,ref monthCount);
    43 
    44                
    45 
    46                 paras[1] = new SqlParameter("strWhere", strWhere);
    47                 paras[2] = new SqlParameter("sqlWhere", sqlWhere    );
    48 
    49                 paras[3] = new SqlParameter("reportCount", Convert.ToInt32(monthCount));
    50 
    51                 paras[4] = new SqlParameter("RecordCount", query.SumRecordsCount);
    52                 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)构造函数重载。

  • 相关阅读:
    ThinkPHP 3.2.2 实现持久登录 ( 记住我 )
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 20 有效的括号
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 19删除链表的倒数第N个节点
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 18 四数之和
    Java实现 LeetCode 17 电话号码的字母组合
  • 原文地址:https://www.cnblogs.com/xiaoerlang90/p/4812360.html
Copyright © 2011-2022 走看看