知识大全 C#中的DBNull、Null和String.Empty解释

Posted 类型

篇首语:贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#中的DBNull、Null和String.Empty解释相关的知识,希望对你有一定的参考价值。

C#中的DBNull、Null和String.Empty解释  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   对DBNull的解释     该类用于指示不存在某个已知值(通常在数据库应用程序中)

  在数据库应用程序中 空对象是字段的有效值 该类区分空值(空对象)和未初始化值(DBNull Value   实例) 例如 表可以包含具有未初始化字段的记录 默认情况下 这些未初始化字段具有   DBNull   值

  该类还可以用于在      Interop   中区分   VT_NULL   变量(与空对象关联)和   VT_EMPTY   变量(与   DBNull Value   实例关联)

  DBNull   从不等于任何值

  DBNull   是一个单独的类 这意味着该类只能存在一个实例 这个唯一的实例是   DBNull Value

  访问   SQL   数据库的数据密集应用程序必须使用   System Data SqlTypes   类 这些类对空值具有内在支持

  

  DBNull在DotNet是单独的一个类型 该类只能存在唯一的实例 DBNULL Value DBNull唯一作用是可以表示数据库中的字符串 数字 或日期 为什么可以表示原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的 对于 DataRow 它的 row[column] 返回的值永远不为 null 要么就是具体的为column 的类型的值 要么就是 DBNull 所以 row[column] ToString() 这个写法永远不会在ToString那里发生NullReferenceException DBNull 实现了 IConvertible 但是 除了 ToString 是正常的外 其他的ToXXX都会抛出不能转换的错误

   Null

  null 关键字是表示不引用任何对象的空引用的文字值 null 是引用类型变量的默认值 那么也只有引用型的变量可以为NULL 如果 int i=null 的话 是不可以的 因为Int是值类型的     null    means   the   object   reference   is   invalid   in   NET    when   you   retrieve   a   NULL   value   from   the   Database    it   is   a   valid   value   to   NET    and   it   is   represented   by   System DBNull Value    null用于判断Reference   invalidate

   和String Empty

  这两个都是表示空字符串 其中有一个重点是string str = 和 string str =null 的区别 这样定义后 str 是一个空字符串 空字符串是一个特殊的字符串 只不过这个字符串的值为空 在内存中是有准确的指向的 string str =null 这样定义后 只是定义了一个string 类的引用 str 并没有指向任何地方 在使用前如果不实例化的话 都将报错

   Convert IsDBNull()

  Convert IsDBNull()返回有关指定对象是否为 DBNull 类型的指示 即是用来判断对象是否为DBNULL的 其返回值是True或Flase

  DBNull在DotNet是单独的一个类型 System DBNull 它只有一个值 DBNull Value DBNull 直接继承 Object 所以 DBNull 不是 string 不是 int 也不是 DateTime

  但是为什么 DBNull 可以表示数据库中的字符串 数字 或日期呢?原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的

  对于 DataRow 它的 row[column] 返回的值永远不为 null 要么就是具体的为column 的类型的值 要么就是 DBNull 所以 row[column] ToString() 这个写法永远不会在ToString那里发生NullReferenceException

  DBNull 实现了 IConvertible 但是 除了 ToString 是正常的外 其他的ToXXX都会抛出不能转换的错误

  在 IDbCommand(OleDbCommand SqlCommand ) 的ExecuteScalar的返回值中 情况可以这样分析

    select 这样返回的object是     select null 这样返回的是DBNull Value    select isnull(null ) 返回的是     select top id from table 这样返回的值是null    select isnull(id ) from table where = 返回的值是null

  这里 ExecuteScalar 的规则就是 返回第一列 第一行的数据 如果第一列第一行不为空 那么ExecuteScalar就直接对应的DotNet的值 如果有第一行 但是第一列为空 那么返回的是 DBNull 如果一行都没有 那么ExecuteScalar就返回null

  规则就是这样的 这里容易犯的一个错误是 把ExecuteScalar返回DBNull与null的情况混淆 例如

  string username=cmd ExecuteScalar() ToString();

  除非你认为cmd执行后 肯定至少有一行数据 否则这里就会出错

  又或者 select id from usertable where username=@name 这样的sql语句 如果找不到记录 那么ExecuteScalar则会返回null 所以千万不要

  int userid=Convert ToInt (cmd ExecuteScalar());

  或者你会这样写 SQL 语句 select isnull(id ) from usertable where username=@name

  但是 int userid=Convert ToInt (cmd ExecuteScalar()); 依然会出错 因为上面的语句不成立时 仍然是不返回任何行

  对于IDbDataParameter(OleDDbParameter SqlParameter )的Value 如果为null 则代表该参数没有指定 或者是代表DEFAULT 如果为DBNull Value 则代表SQL中的NULL

  所以 如果你要调用存储过程 里面有参数 @val nvarchar( )= AABB     那么cmd Parameters[ @val ] Value=null 代表使用这个默认的 AABB     而cmd Parameters[ @val ] Value=DBNull Value 代表使用NULL来传给 @val

cha138/Article/program/net/201311/11726

相关参考

知识大全 理解C#中的代理和事件(一)

理解C#中的代理和事件(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  突然写这篇文章真的有

知识大全 C# 开发和使用中的23个技巧

C#开发和使用中的23个技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  怎样定制VC#Dat

知识大全 Visual Basic和C#中的LINQ聚合

VisualBasic和C#中的LINQ聚合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ag

知识大全 菜鸟入门认识C#中的委托和事件教程

菜鸟入门认识C#中的委托和事件教程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言 

知识大全 C# 开发和使用中的33个技巧(1)

C#开发和使用中的33个技巧(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  怎样定制VC#

知识大全 全面分析C#方法中的ref和out

全面分析C#方法中的ref和out  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ref&nbs

知识大全 NULL 小议

NULL小议  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们都知道在ORACLE中NULL表

知识大全 c#中的using和as操作符的详细讲解

  这个操作符在小处非常有用   using  using语句定义一个范围在此范围的末尾将处理对象  举例  classTestUsing:IDisposable    

知识大全 C#中的基元类型

C#中的基元类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这篇文章我想复习下C#中的基元类

知识大全 C#枚举中的位运算

C#枚举中的位运算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文介绍C#位运算的处理方法第