测试准备:

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 作为条件判断是容易出问题的。

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

dbnull和null_NULL和DBNull的区别分析相关推荐

  1. RADAR和LIDAR区别分析

    RADAR和LIDAR区别分析 如果一直关注自动驾驶汽车的新闻,可能已经注意到许多自动驾驶汽车制造商正在使用LIDAR(光成像检测和测距)进行车载物体检测.对于许多自动 驾驶汽车应用而言,LIDAR比 ...

  2. sql语句中left join和inner join中的on与where的区别分析

    原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...

  3. c语言中 char怎样用,C语言中char*和char[]用法区别分析

    C语言中char*和char[]用法区别分析 本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很 ...

  4. mysql数据库varchar的区别_MySQL数据库char与varchar的区别分析及使用建议

    在数据库中,字符 型的数据是最多的,可以占到整个数据库的80%以上.为此正确处理字符型的数据,对于提高数据库的性能有很大的作用.在字符型数据中,用的最多的就是 Char与Varchar两种类型.前面的 ...

  5. java堆和客栈_java中堆和栈的区别分析

    堆和栈是java数据结构里非常重要的概念,本文较为详细的分析了二者之间的区别.供大家参考.具体如下: Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newarray.an ...

  6. java 覆盖和隐藏_Java方法的覆盖与隐藏的区别分析

    本篇文章介绍了,关于Java方法的覆盖与隐藏的区别分析.需要的朋友参考下 关于隐藏和覆盖的区别,要提到RTTI(run-time type identification)(运行期类型检查),也就是运行 ...

  7. mysql中char与varchar的区别分析

    原文网址:http://www.jb51.net/article/23575.htm mysql中char与varchar的区别分析 作者: 字体:[增加 减小] 类型:转载 在mysql教程中cha ...

  8. php在类定义一个我静态变量,php中静态类与静态变量用法的区别分析_PHP教程

    php中静态类与静态变量用法的区别分析 static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了. 1. 创建对象$object = ...

  9. php request time,php中time()与$_SERVER[REQUEST_TIME]用法区别分析

    php中time()与$_SERVER[REQUEST_TIME]用法区别分析 发布于 2015-01-26 08:56:46 | 143 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本 ...

最新文章

  1. 三. python面向对象(私有属性和私有方法 私有静态方法 私有类方法)
  2. javascript对象的几种创建方式
  3. bootstrap与zookeeper区别
  4. 《SQL初学者指南(第2版)》——2.4 指定列
  5. 敏捷开发总结(1)软件研发过程
  6. 一份好的工作总结才能帮你升职加薪
  7. navicat 官方使用手册,中文版,快捷键大全
  8. 面试准备——Java回顾:高级编程(多线程、常用类、集合、泛型、IO流、反射、动态代理、新特性)
  9. win定时关机_电脑定时关机,你造吗?
  10. w25q64 linux,W25Q64Flash芯片STM32操作
  11. 手机cpu天梯图2020
  12. 微信小程序后台销毁时间 演变和总结(热启动时间限制)
  13. 专题2:matlab矩阵处理
  14. FX5u plc 如何实现网络远程通讯
  15. 如何使用启动盘PE桌面工具安装原版win7系统?
  16. 无尽神域服务器维护,关于对无尽神域的感受亲爱的无尽神域开发团队:
  17. dojo框架的基本认识
  18. 你的圈子,已经暴露了你的阶层
  19. Java 循环面试题
  20. STM32cubIDE 黑色主题_主题 | Mation 微信主题 适配7和7以下版本

热门文章

  1. boost::generate相关的测试程序
  2. boost::insert相关的测试程序
  3. boost::iostreams模块实现具有64位大文件偏移量的测试程序
  4. boost::gil::channel_view用法的测试程序
  5. boost::gil::view_is_mutable用法的测试程序
  6. GDCM:gdcm::ImageFragmentSplitter的测试程序
  7. gdcm::ImageChangePhotometricInterpretation的测试程序
  8. boost::container实现emplace进位的程序
  9. boost::callable_traits的is_reference_member的测试程序
  10. Boost:boost::bimaps::unordered_multiset_of的测试程序