zoukankan      html  css  js  c++  java
  • 不一样的 Null

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

    Student stu = new Student();
    stu.Name = "晓菜鸟";
    stu.Age = 21;
    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.

    :)

  • 相关阅读:
    指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)
    bitset初始化问题
    书籍
    编译器的工作过程
    C++函数传递指向指针的指针的应用
    程序员面试金典--二叉树的下一个结点
    程序员面试金典--对称的二叉树
    程序员面试金典--按之字形顺序打印二叉树
    程序员面试金典--阶乘尾零
    程序员面试金典--矩阵元素查找
  • 原文地址:https://www.cnblogs.com/52XF/p/3858671.html
Copyright © 2011-2022 走看看