• 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)构造函数重载。

  • 相关阅读:
    GET和POST两种基本请求方法的区别
    GET与POST类型接口
    TCP连接与断开详解(socket通信)
    QC02
    QC01
    tcp三次握手和四次挥手
    ssh整合
    redis主从切换
    缓存解释(一级缓存,二级缓存)
    cxf整合spring代码
  • 原文地址:https://www.cnblogs.com/xiaoerlang90/p/4812360.html
Copyright © 2020-2023  润新知