NULL和DBNull的区别分析

测试准备:

1.新建一个表

CREATE TABLE `cacb` (
  `CA` varchar(255) DEFAULT NULL,
  `CB` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.新建一个控制台项目,主函数实现如下:

 #region Mysql DBNull测试
            string con = "server=localhost;User Id=root;database=mytest;password=my88888;persist security info=True;charset=utf8;";

            bool flg = null is object;//false
            bool fdb = DBNull.Value is object;//true

            string sql = "SELECT * from CACB  limit 1,1;";
            using (MySqlConnection mc=new MySqlConnection(con))
            {
                mc.Open();
                using (MySqlCommand com=new MySqlCommand(sql,mc))
                {
                     var result= com.ExecuteScalar();
                     if (result==DBNull.Value)
                     {
                         Console.WriteLine("这个确定是数据库空的了");
                     }
                     if (result==null)
                     {
                         Console.WriteLine("这里是null了.");
                     }
                }
            }
            #endregion

3.结论:DBNull是针对那些查询出来的值为Null的数据,继承Object,null是.net里面的一种类型数据不继承Object,说白了就是,DBNull是数据库的默认空值,而null是.net的默认值空值。那么row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。

需要引起注意的是: ExecuteScalar的规则是,返回第一列,第一行的数据。假如有第一行,但是第一列为空,那么返回的是DBNull 。假如一行都没有,那么ExecuteScalar就返回null,假如第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。

所以我们在查询数据的结果的时候要注意直接用 dbresult==null 作为条件判断是容易出问题的。

可以参考下前辈们的探索:

  1. http://blog.csdn.net/cmalaya/article/details/7222621

  2. http://www.cnblogs.com/chen-fan/articles/2171399.html



转载于:https://my.oschina.net/robortly/blog/491777

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值