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

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

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

    下面我们看个例子:

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

    上述代码咋看冇问题,其实当stuName或stuAge的值为null时,就会抛出异常。那怎么解决呢?
    解决方案:当stuName或stuAge的值为null时,传入DBNull.Value。下面在公共类里写一个静态的通用方法对传入的参数值进行判断,为null则返回DBNull.Value,否则返回原值。

     1 public static object SqlNull(object obj)
     2 {
     3   if(obj == null)
     4   {
     5     return DBNull.Value;
     6   }
     7   else
     8   {
     9     return obj;
    10   }    
    11 }

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

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

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

     1 public static object SqlNull(object obj)
     2 {
     3    if(obj == null || obj.ToString() == "")
     4    {
     5      return DBNull.Value;
     6    }
     7    else
     8    {
     9      return obj;
    10    }    
    11  }

    延伸:

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

     1 SqlParameter[] parm = new SqlParameter[]
     2 {
     3   new SqlParameter("@StuName", SqlNull(stuName)),
     4   new SqlParameter("@StuAge", SqlNull(stuAge))  
     5 }
     6 if(parm != null)
     7 {
     8   cmd.Parameters.AddRange(parm);   
     9 }
    10 cmd.ExecuteNonQuery(); 

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

  • 相关阅读:
    数据库的三大范式以及五大约束
    解析PHP面向对象的三大特征
    php中的数组遍历的几种方式
    PHP中的函数声明与使用
    使用mui框架打开页面的几种不同方式
    JS中精选this关键字的指向规律你记住了吗
    同一功能三种不同实现方式你选哪个
    转!!NPM报错 Error: EPERM: operation not permitted, unlink......解决办法和清除缓存。
    转!!关于http请求 浏览器 中文编码
    CentOS6.5下Apache防止目录遍历
  • 原文地址:https://www.cnblogs.com/Scl891004X/p/6962113.html
Copyright © 2011-2022 走看看