zoukankan      html  css  js  c++  java
  • [C#.net]SQL参数传入空值报错解决方案

    C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。

    注意:SQL参数是不能接受C#的null值的,传入null就会报错。

    SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);
    cmd.parameters.add("@StuName" ,stuName);
    cmd.parameters.add("@StuAge" ,stuAge);
    cmd.ExecuteNonQuery();

    上述代码咋看冇问题,其实当stuName或stuAge的值为null时,就会抛出异常。那怎么解决呢?

    解决方案:当stuName或stuAge的值为null时,传入DBNull.Value。下面在公共类里写一个静态的通用方法对传入的参数值进行判断,为null则返回DBNull.Value,否则返回原值。

    public static object SqlNull(object obj)
     {
      if(obj == null)
      {
       return DBNull.Value;
      }
      else
      {
       return obj;
      }  
     }

    调用上述方法后的代码如下:

    SqlCommand cmd=new SqlCommand("Insert into Student values(@StuName,@StuAge)" ,conn);
    cmd.parameters.add("@StuName" ,SqlNull(stuName));
    cmd.parameters.add("@StuAge" ,SqlNull(stuAge));
    cmd.ExecuteNonQuery();

    另外,如果参数值来源于控件(如文本框)的值,则传入的参数值不会为null(因为控件的值不会为null,即便没值也是""),如果想实现当控件的值为""(如文本框中没有输入字符)时,数据表字段值为NULL,只需对SqlNull方法稍作修改:

    public static object SqlNull(object obj)
    {
      if(obj == null || obj.ToString() == "")
      {
       return DBNull.Value;
      }
      else
      {
       return obj;
     }  
    }

    传SQL参数还可以传参数组,如下:

    SqlParameter[] parm = new SqlParameter[]
    {
     new SqlParameter("@StuName", SqlNull(stuName)),
     new SqlParameter("@StuAge", SqlNull(stuAge)) 
    }
    if(parm != null)
    {
     cmd.Parameters.AddRange(parm);  
    }
    cmd.ExecuteNonQuery();

    注意:new SqlParameter(参数名, 参数值)里的参数值同样不接受null值,且parm参数组也不接受null, if(parm != null) 的判断不能少。

  • 相关阅读:
    element-ui upload 上传图片之前压缩
    字符串截取substring放法传参不同返回不同
    vue中对于图片是否正常加载的思考
    前端图片合成并下载
    vue中图相对路径引用本地图片
    js计算精度
    vue-cli定义全局过滤器
    js加减乘除运算丢失精度 前端计算金额带小数点精度丢失问题
    鼠标样式大全
    js两小时倒计时,剩余时间倒计时,倒计时
  • 原文地址:https://www.cnblogs.com/masonlu/p/10621307.html
Copyright © 2011-2022 走看看