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参数组也不接受nullif(parm != null) 的判断不能少

更多相关文章

  1. jquery pqgrid分页控件乱码是什么情况?
  2. C#中方向键与回车键切换控件焦点的两种方法
  3. 一个很强大的控件--PropertyGrid
  4. 详解可选参数和命名参数实例
  5. C#中自定义控件如何实现TextBox禁止粘贴的示例代码
  6. ASP.NET中的参数与特殊类型的实例详解
  7. Asp.net 中用GridView控件的实例教程
  8. Asp.Net用控件实现本地图片的显示
  9. 详解如何用WPF图形解锁控件ScreenUnLock

随机推荐

  1. golang怎么截获错误
  2. golang如何导入包
  3. golang Web框架有哪些?
  4. golang的框架有哪些
  5. golang如何获取当前时间的前几天
  6. golang的函数怎么写
  7. golang实现生成不重复随机数
  8. golang如何删除数组中的元素
  9. golang返回错误时如何正确处理
  10. golang判断文件是否存在的方法