前不久处理一个异常的时候发现了一段有趣的代码,一同事在往表里(Sql Server 数据库)添加数据的时候给可以为 null 的字段赋了如下的值:

Student stu = new Student();
stu.Name = "晓菜鸟";
stu.Age = ;
stu.RegTime = (DateTime)System.Data.SqlTypes.SqlDateTime.Null;
stu.Remark = (string)System.Data.SqlTypes.SqlString.Null;
stuService.Add(stu);

  问题出现在读取数据上,读取的时候判断 Remark != null 竟然成立,然后读取数据就报错了。:(

    后来我查看数据库记录,发现存储的 Null 和数据库默认的 Null 不一样,在 C# 里面进行比较,得到的结果也证明他们是不一样的 Null 。

  

  总结:我个人觉得根本就不用这么做,假如数据库中 nvarchar 或者 varchar 类型的字段设置了可以为 null,就没必要主动赋 null 值给他,默认的就是null,而对于 DateTime 类型来说,就算你没有在数据库中显示的设置默认值,你插入一个空值进去他保存的也是系统默认时间(1900-01-01)。

  注意:对于 DateTime 类型,插入空值和 Null,结果是不一样的。

//数据库 test 表结构
//Name nvarchar(50) 可以为 null
//CreateTime datetime 可以为 null string cmdStr = string.Format("insert into [test] VALUES('{0}','{1}')", name, null);//操作结果:默认值 1900-01-01.
string cmdStr = string.Format("insert into [test] VALUES('{0}',null)", name);//操作结果:NULL .
string cmdStr = string.Format("insert into [test] VALUES('{0}','')", name);//操作结果:默认值 1900-01-01.

:)

最新文章

  1. MySQL知识树-支持的数据类型
  2. 2015.05.12:json的常用处理方式
  3. nginx的upstream目前支持5种方式的分配(转)
  4. apache使用ssl数字证书
  5. oracle--number
  6. 获得android应用的版本号
  7. VC获取精确时间的做法
  8. netsh命令之ip设置
  9. Vuex 模块化与项目实例 (2.0)
  10. [1] Entity Framework
  11. UWP: 在 UWP 中使用 Entity Framework Core 操作 SQLite 数据库
  12. 《Node.js 高级编程》简介与第二章笔记
  13. Consul vs. Zookeeper
  14. Alpha预乘-混合与不混合[转]
  15. AOP编程报错Xlint:invalidAbsoluteTypeName
  16. hdu 1828 Picture 切割线求周长
  17. SqlServer触发器实现表的级联插入、级联更新
  18. 成员函数的const究竟修饰的是谁
  19. sed你所不知道的语法
  20. Oracle replace()函数

热门文章

  1. [转帖]为何 CPU 只用硅,而不用能耗更低的锗制作?知乎好文章
  2. 103 保序回归 isotonic regression
  3. PHP迭代生成器---yield
  4. Shell重定向:2>&1
  5. hdu 1698 线段数的区间更新 以及延迟更新
  6. [Vue]vue-router嵌套路由(子路由)
  7. Java内存 模型理解
  8. JoinableQueue类与线程
  9. 最近发现了一篇讲解Vue的虚拟DOM,diff很棒的文章,特定记录转载一下
  10. 阿里P7分享如何面对枯燥的源码