1   概述

如下例子,你觉得有什么问题?如你能很快的找出问题,并且解决它,那么你可以跳过本篇文章,谢谢~~。

 List<Base_Employee> ltPI = new List<Base_Employee>();
DataTable dt = GetBase_UserInfoToDataTable();
for (int i = ; i < dt.Rows.Count; i++)
{
Base_Employee base_Employee= new Base_Employee();
base_Employee.EmployeeId= dt.Rows[i]["EmployeeId"].ToString();//EmployeeId为string类型
base_Employee.Age =(int)dt.Rows[i]["Age"];//Age为int类型
base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];//GraduationDate 为DateTime类型
}

想一分钟,OK,如果没想出来,可以往下看,下图标注处即为问题处。

ok,本篇文章就是来解决该问题的。也就是接下来要与大家分享的System.DBNULL类型。

2   内容分享

2.1  在.NET中的,常用的基本数据类型

int,string,char等是大家比较熟悉的基本数据类型,但是大部分人都应该对System.DBNull比较陌生,然而,它又是解决如上问题的一大思路。

2.2  SqlServer中的常用数据类型

varchar,nvarchar,int,bit,decimal,datetime等,基本在与.net中的数据类型一一对应(varchar和nvarchar均对应.net中的string类型)

2.3  SqlServer中的常用数据类型的初始值

在.net中,当我们定义一个变量时,如果没给其赋初始值,那么系统会默认初始值,如int 类型默认为0,string类型默认为string.Empty,一般情况,不同类型的默认初始值是不同的;但是,在SqlServer中,几乎所有变量类型的初始值为NULL,也就要么为用户自定义的值,要么为系统默认的值NUL。问题的关键就在这,以int类型为例,当在数据库中,我们没有给INT赋值时,其默认值为NULL,当把这个值赋给.net中的整形变量时,就会引发异常。

2.4  System.DBNull是什么?

DBNull是一个类,继承Object,其实例为DBNull.Value,相当于数据中NULL值。

2.5  为什么 DBNull可以表示其他数据类型?

在数据库中,数据存储以object来存储的。

2.6 如何解决如上问题

加条件判断

可以用string类型是否为空,或DBNull是否等于NULL来判断

 List<Base_Employee> ltPI = new List<Base_Employee>();
DataTable dt = GetBase_UserInfoToDataTable();
for (int i = ; i < dt.Rows.Count; i++)
{
Base_Employee base_Employee= new Base_Employee();
base_Employee.EmployeeId= dt.Rows[i]["EmployeeId"].ToString();//EmployeeId为string类型
//base_Employee.Age =(int)dt.Rows[i]["Age"];//Age为int类型
if (dt.Rows[i]["Age"]!=System.DBNull.Value)
{
base_Employee.Age = int.Parse(dt.Rows[i]["Age"].ToString());
//base_Employee.Age = (int)dt.Rows[i]["Age"];//拆箱
//base_Employee.Age =Convert.ToInt16( dt.Rows[i]["Age"]);
}
//base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];//GraduationDate 为DateTime类型
if (dt.Rows[i]["GraduationDate"].ToString()!="")
{
base_Employee.GraduationDate = Convert.ToDateTime(dt.Rows[i]["GraduationDate"]);
base_Employee.GraduationDate = (DateTime)dt.Rows[i]["GraduationDate"];
}
}

3   版权

  • 感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。
  • 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2016177728@qq.com。
  • 可以转载该博客,但必须著名博客来源。

[C#]关于DBNULL的解释的更多相关文章

  1. C#中的DBNull、Null、""和String.Empty

    1.对DBNull的解释:    该类用于指示不存在某个已知值(通常在数据库应用程序中).       在数据库应用程序中,空对象是字段的有效值.该类区分空值(空对象)和未初始化值(DBNull.Va ...

  2. C# null,string.Empty,"",DBNull 的区别

    [null] null 在C# 中是一个关键字,表示不引用任何对象的空引用的文字值. null 是引用类型变量的默认值. 普通值类型不能为 null. null 在 VS 中定位不出来具体是怎么定义的 ...

  3. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  4. 说说BPM数据表和日志表中几个状态字段的详细解释

    有个客户说需要根据这些字段的值作为判断条件做一些定制化需求,所以需要知道这些字段的名词解释,以及里面存储的值具体代表什么意思 我只好为你们整理奉上这些了! Open Work Sheet  0 Sav ...

  5. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  6. nodejs、npm、grunt——名词解释

    最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...

  7. HTTP各状态码解释

      状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必 ...

  8. JavaScript中‘this’关键词的优雅解释

    本文转载自:众成翻译 译者:MinweiShen 链接:http://www.zcfy.cc/article/901 原文:https://rainsoft.io/gentle-explanation ...

  9. XML简介与CDATA解释

    简介XML 是一种受到广泛支持的 Internet 标准,用于以一种特殊的方式编码结构化数据.实际上,以 XML 编码的数据可以通过任何编程语言解码,人们甚至可以使用标准的文本编辑器来阅读或编写 XM ...

随机推荐

  1. PowerShell 脚本执行策略

    为防止恶意脚本的执行,PowerShell 中设计了一个叫做执行策略(Execution Policy)的东西(我更倾向于把它叫做脚本执行策略).我们可以在不同的应用场景中设置不同的策略来防止恶意脚本 ...

  2. c++中find函数的用法

    find函数主要实现的是在容器内查找指定的元素,并且这个元素必须是基本数据类型的.查找成功返回一个指向指定元素的迭代器,即元素在容器中的下标,查找失败返回end迭代器. 头文件 #include &l ...

  3. 标准的Java编码规范手册

    编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题.今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助. 编码规范的意义      ...

  4. java异常—检查异常(checked exception)和未检查异常(unchecked exception)

    网易面试要我画异常的结构图,什么是检查异常,什么是非检查异常,我当时的表情是这样的,.我看过,忘了.没办法,继续看,写博客掌握. 先来看看异常的结构图,建议你结合JDK一起看. 可以看出异常的家族势力 ...

  5. 现在开始学习WPF了,mongodb在整理一下

    回忆一下自己学习mongodb的过程 1安装 2增删改查 3数据类型转换 4GridFS 5权限管理--开启权限之前先建立一个超级用户(admin库中),开启权限,用该用户登陆,进入admin数据库( ...

  6. EAGO科技人工智能+澳洲MSPL外汇平台招商

    天下财经 首席运营商 EAGO外汇人工智能简介:我们将历史数据导入算法引擎,加入因子(外汇中使用的各种技术指标及各个国家的货币政策等)让计算机通过二元遗传基因.深度神经网络等算法,由机器自主深度学习. ...

  7. 在Hudson Job中启动daemon进程

    场景 在Hudson中新建一个Job用于构建Web工程,在Job的构建脚本的最后会启动Jetty,观察发现Jetty启动之后一小段时间,进程就终止了.   环境 CentOS 6,Hudson 3.0 ...

  8. Ext.Ajax.request

    function create(){ var itstate = $("#myselect").val(); Ext.Ajax.request({ url: '/servlet/A ...

  9. java.lang.reflect.MalformedParameterizedTypeException异常问题

    做dubbo框架集成的时候,出现的问题,本来的原来的工程没有错误,引入dubbo后报错,原因是spring的jar文件冲突,我用的spring是4.x,dubbo引入的是2.5所以需要去掉,相关的po ...

  10. [C#] .Net Core 全局配置读取管理方法 ConfigurationManager

    最近在学习.Net Core的过程中,发现.Net Framework中常用的ConfigurationManager在Core中竟然被干掉了. 也能理解.Core中使用的配置文件全是Json,不想F ...