对DBNull的解释:
该类用于指示不存在某个已知值(通常在数据库应用程序中)。
在数据库应用程序中,空对象是字段的有效值。该类区分空值(空对象)和未初始化值(DBNull.Value 实例)。例如,表可以包含具有未初始化字段的记录。默认情况下,这些未初始化字段具有 DBNull 值。
该类还可以用于在 COM Interop 中区分 VT_NULL 变量(与空对象关联)和 VT_EMPTY 变量(与 DBNull.Value 实例关联)。
DBNull 从不等于任何值。
DBNull 是一个单独的类,这意味着该类只能存在一个实例。这个唯一的实例是 DBNull.Value。 中国网管联盟www_bitscn_com
访问 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都会抛出不能转换的错误。 54ne.com
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 str1="" 和 string str2=null 的区别,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的,string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错。
Convert.IsDBNull()
Convert.IsDBNull()返回有关指定对象是否为 DBNull 类型的指示,即是用来判断对象是否为DBNULL的。其返回值是True或Flase。 中国网管联盟www.bitscn.com
DBNull在DotNet是单独的一个类型 System.DBNull 。它只有一个值 DBNull.Value 。DBNull 直接继承 Object ,所以 DBNull 不是 string , 不是 int , 也不是 DateTime 。。。
但是为什么 DBNull 可以表示数据库中的字符串,数字,或日期呢?原因是DotNet储存这些数据的类(DataRow等)都是以 object 的形式来储存数据的。 中国网管联盟www、
对于 DataRow , 它的 row[column] 返回的值永远不为 null , 要么就是具体的为column 的类型的值。要么就是 DBNull 。 所以 row[column].ToString() 这个写法永远不会在ToString那里发生NullReferenceException。
DBNull 实现了 IConvertible 。 但是,除了 ToString 是正常的外,其他的ToXXX都会抛出不能转换的错误。
数据库操作与DBNull和Null
在 IDbCommand(OleDbCommand,SqlCommand...) 的ExecuteScalar的返回值中,情况可以这样分析:
select 1 这样返回的object是 1
select null 这样返回的是DBNull.Value
select isnull(null,1) 返回的是 1
select top 0 id from table1 这样返回的值是null
select isnull(id,0) from table1 where 1=0 返回的值是null 中国网管联盟www.bitscn.com
这里 ExecuteScalar 的规则就是,返回第一列,第一行的数据。如果第一列第一行不为空,那么ExecuteScalar就直接对应的DotNet的值。如果有第一行,但是第一 列为空,那么返回的是 DBNull 。如果一行都没有,那么ExecuteScalar就返回null
规则就是这样的。这里容易犯的一个错误是,把ExecuteScalar返回DBNull与null的情况混淆,例如:
string username=cmd.ExecuteScalar().ToString(); 中国网管联盟www.bitscn.com
除非你认为cmd执行后,肯定至少有一行数据,否则这里就会出错。 网管联盟www.bitsCN.com
又或者 select id from usertable where username=@name 这样的sql语句,如果找不到记录,那么ExecuteScalar则会返回null,所以千万不要
int userid=Convert.ToInt32(cmd.ExecuteScalar());
或者你会这样写 SQL 语句:select isnull(id,0) from usertable where username=@name
但是 int userid=Convert.ToInt32(cmd.ExecuteScalar()); 依然会出错,因为上面的语句不成立时,仍然是不返回任何行。
对于IDbDataParameter(OleDDbParameter,SqlParameter..)的Value,如果为null,则代表该参数没有指定,或者是代表DEFAULT。如果为DBNull.Value,则代表SQL中的NULL
所以,如果你要调用存储过程,里面有参数 @val nvarchar(20)="AABB" ,
那么cmd.Parameters["@val"].Value=null 代表使用这个默认的 "AABB"
而cmd.Parameters["@val"].Value=DBNull.Value 代表使用NULL来传给 @val
你可以用Convert.IsDBNull来判断一个值是否DBNull。注意Convert.IsDBNull(null)是false。
相关推荐
在ASP.NET开发中,了解`DBNull.Value`, `null`, 和 `String.Empty`的区别至关重要,因为它们在处理数据和字符串操作时有不同的含义和用途。以下是对这三个概念的详细解析: 1. **DBNull.Value**: DBNull.Value是...
如果查询结果为`null`或`DBNull.Value`,则返回`null`;否则返回查询结果。此方法适用于那些只需要一个值的查询场景,如查询计数器或特定值。 ### 总结 通过以上分析,我们可以看出`Database.cs`类是一个功能全面...
例如,在C#中,当我们尝试将DBNull.Value转换为int、string或其他任何类型时,就会引发此异常。这主要是因为DBNull.Value不是一个实际的对象实例,而是一种特殊标记,用于表示数据行中的特定列包含数据库NULL值。 #...
Newtonsoft.Json支持对DBNull、自定义类型、接口、泛型等复杂类型的序列化和反序列化,只需添加适当的转换器。 6. Json.NET的LINQ扩展: 使用`Json.Linq.JObject`和`Json.Linq.JArray`,可以对JSON数据进行查询和...
### ASP.NET中对数据库表插入NULL空值的问题 在ASP.NET开发过程中,向数据库表插入数据时遇到NULL值处理不当的...通过上述方法,可以有效地解决ASP.NET中数据库表插入NULL空值的问题,提高应用程序的稳定性和可靠性。
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。 注意:SQL参数是不能接受C#的null值的,传入null就会报错。 下面我们看个例子: SqlCommand cmd=new SqlCommand(Insert into ...
总结起来,通过上述知识点的学习,我们可以更好地理解和掌握如何使用C#进行数据库操作,包括事务处理、动态SQL构建、存储过程调用、查询分页以及正确处理NULL值等关键方面。这些技能对于开发高效稳定的应用程序至关...
- 检查每列数据是否为`null`,如果为`null`则用`DBNull.Value`替换,这是因为DBF文件不支持直接存储`null`值。 - 代码示例: ```csharp for (int i = 0; i < dt.Rows.Count; i++) { DataRow dr = dt1.NewRow()...
1 通过System.DBNull判断,网上大部分都使用这个方法。 代码如下:DataTable dt; //假设字段为name, dt已经保存了数据dt.rows[0][“name”] == System.DBNull.Value; //判断第一行数据的name字段是否为空 2 通过Is...
在C#中,改变DataGrid的行和单元格颜色通常涉及到对WPF的DataGrid控件的操作,包括数据源的绑定、行和单元格的获取以及样式设置。以下是一个详细的步骤来实现这一功能: 1. **添加DataGrid控件**: 在XAML文件中,...
但是,一个特殊的类 TheoreticalValue(类似于 C# DBNull)将替换空字段、NA 字段和无限值,允许简单的算术函数同时避免 NullPointerExceptions,否则不会影响您的操作。 该库还为 DataTable 的超类 ...
在实际应用中,我们还需要注意JSON与C#数据类型的对应关系,例如JSON的`null`在C#中可能对应`null`、`default(T)`或者`DBNull.Value`。此外,Json.NET还提供了动态JSON对象(`JObject`)和JSON数组(`JArray`),它们...
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdResult = 0; } else { cmdResult = int.Parse(obj.ToString()); } return cmdResult == 0 ? false : true; } ``` ...
然后,我们添加了一个`SqlParameter`,名为`@DateTimeValue`,类型设置为`SqlDbType.DateTime`,并将其值设置为`DBNull.Value`,这代表SQL中的`NULL`。最后,我们执行`ExecuteNonQuery()`来执行命令,从而将空值插入...
本文将基于提供的代码片段来深入探讨C#中的几种常见类型转换方法,以及如何进行汉字和Email的判断。 #### 类型转换:字符串与整型 在提供的代码片段中,`Ctype`类提供了两个用于字符串转换的方法:`Cstr`和一个...
在C#中与Oracle数据库进行交互是常见的任务,本文将详细介绍两种主要的连接方式、事务处理、命令参数的创建以及如何使用数据集显示查询结果。这些知识点对于开发C#应用程序并需要与Oracle数据库进行交互的开发者来说...
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } if (cmdresult == 0) { return false; } else ...
在C#编程中,反射是一种强大的机制,它允许运行时检查和操作程序集、类型、方法、属性等元数据。本篇文章将详细讲解如何利用C#的反射机制将数据库中的字段动态地绑定到用户界面(UI)控件上,以实现更灵活的数据展示...
### C#中企业库及其使用方法 #### 一、企业库简介 Enterprise Library 是由 Microsoft Patterns & Practices 团队开发的一套组件集,用于帮助开发者更高效地构建可扩展、可维护的应用程序。Enterprise Library 2.0...