zoukankan      html  css  js  c++  java
  • 数据库中的null问题

      在数据库中有些列的值可以为null,这一篇,我们围绕数据库中的null来讲述。

    1.  null与 “”、0的区别

         数据库中的null表示——不知道,“”——一个空字符串,0则是一个数值。

         所以null是指不确定的意思,而后两者则都是确定的值。因此,我们在项目中必须严格区分null和空字符串、0   

    2.  查询Name为null的人的信息  

        在表 t_person中,Name这一列的值,可以为null,现在我们要查询所有Name为null的人的信息。

       select * from t_people where Name = null

        结果如何? 什么都没有!!!! 

             因为 = 表比较的意思,在进行比较的时候必须要提供一个定值,null是不确定的,没法比较。

        select * from t_people where Name is null

        这样做就可以查到了, 因为我们检索的是 Name的值是null

    3.  数据库中的null 和 C#中的null

       我们需要将值为null的数据插入到数据库中

        value = null;
        new SqlParameter("@Name", value)

        如果这样写到的话,SqlParameter构造函数的第2个参数如果为null,编译器报错:未提供参数。看来我们不能直接将C#中的null插入到数据库中。C#中用来表示数据库中的null的值是—— DBNull.Value 。注意,我们只能用object类型的变量来接收这个值。怎么说object是所有类型的老祖宗呢!

        object value = DBNull;
        new SqlParameter("@Name", value)

    4.   C#中可以为null的类型

         string这样的类型是可以为null的,而一般的类型,如int、bool、double、DateTime等,都是不可以为null的。

        在数据库中,一个人的年龄有可能是null,而int类型又不能接收null。赋个 0 行不行?大街上遇到一个路人,我们知道他的年龄吗?不知道!!!!而刚出生的婴儿的年龄就是0,路人的年龄和婴儿的年龄显然不相等,怎么可以???

        C#中可以让int等类型接收null值的方法: int? 这个 ? 代表不确定的意思。

        注意在从数据库中获取数据时,注意类型转换!!不能写 (int)了,而是(int?),否则编译器又要报错了!!!

         // Age是从数据库中读取出来的值,有可能是null
          int? age = (int?)Age;

    5.   null 与 DBNull的转换

            /// <summary>
            /// 如果value的值为null,则返回DBNull,否则返回value
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public static object ToDBNull(object value) 
            {
                if (value == null)
                {
                    return DBNull.Value;
                }
                else
                {
                    return value;
                }
            }
    
            /// <summary>
            /// 如果value的值为DBNull,则返回null,否则返回value
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public static object FromDBNull(object value) 
            {
                if (value == DBNull.Value)
                {
                    return null;
                }
                else
                {
                    return value;
                }
            }

        

     

  • 相关阅读:
    使用不同方法输出一维整型数组a的各元素
    从键盘输入一个字符串与一个指定字符,将字符串中出现的指定字符全部删除
    指向函数的指针
    输入一个十进制正整数,将其转换成二进制、八进制、十六进制数输出
    java速成一篇博文搞定基础
    倒排索引lucene
    Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串
    C++对象内存布局2进阶篇C++ 对象的内存布局(下)
    笔试面试设计模式&软件测试&软件工程
    字典树
  • 原文地址:https://www.cnblogs.com/lcxBlog/p/4531931.html
Copyright © 2011-2022 走看看