如何判断数据库中取出的某个字段为空
如果通过name字段在数据库中为空值,⽤ data.Tables[0].Rows[0]["AlarmFlag"] !=null判断得到的结果为true,原因为AlarmFlag字段读出来为system.DBNull
其中AlarmFlag为tinyint类型
正确的判断⽅法是
data.Tables[0].Rows[0]["AlarmFlag"] != System.DBNull.Value
也可以⽤下⾯的⽅法
data.Tables[0].Rows[0]["AlarmFlag"].ToString()!=""
附:null表⽰空对象或指针-在C#中)isnull的用法
System.DBNull表⽰空数据(数据库在C#中的表⽰)
data.Tables[0].Rows[0].IsNull("TIME") ? DateTime.Now : Convert.ToDateTime(data.Tables[0].Rows[0]["TIME"])
其中TIME为DateTime类型
data.Tables[0].Rows[0].IsNull("CIRCLE") ? 0 : Convert.ToInt32(data.Tables[0].Rows[0]["CIRCLE"])
其中CIRCLE为int类型
MSDN:请勿将⾯向对象的编程语⾔中的 null引⽤(在 Visual Basic 中为 Nothing) 概念与 DBNull 对象混淆。在⾯向对象的编程语⾔中, null 引⽤(在 Visual Basic 中为 Nothing) 表⽰不存在对某个对象的引⽤。DBNull 则表⽰未初始化的变量或不存在的数据库列。附: 如何正确理解 SQL 中的 NULL
在 SQL 语句中, NULL 值与字符列中的空格, 数字中的零, 字符列中的 NULL ASCII 字符都不相同. 当DBMS在⼀列中发现⼀个 NULL 值时, 就将其翻译为未定义或是不可⽤的. DBMS不能在⼀列中做出有关 NULL 的假设, 也不能假设 NULL 值等于 NULL, 造成某⼀列成为NULL 的因素可能是: (1),值不存在;(2), 值未知; (3), 列对表不可⽤. 所以, 应将 NULL 值当作是⼀个批⽰符, ⽽不是⼀个值. 当DBMS 在表的某⼀⾏的某⼀列中到 NULL 值时, DBMS就知道该数据已丢失或者是不可⽤.
⼀句话, NULL 指⽰这个值 "未知",原因是它可能不存在, 可能不可⽤, 也可能就是因为值未知.
这⾥对各个环境下的 "空值" (不知道该怎样总称这些东西, 暂且就叫空值吧!)简单的解释⼀下:
1:真正的空值 (SQL 中的 NULL)
等同“没有输⼊的值”,可以出现在⼤多数类型的字段中(如果没有别的约束条件),SQL server中表⽰为null,显⽰为,⼿⼯在SQL server企业管理器中输⼊的⽅法是按Ctrl+0。它在.NET中对应System.DBNull.Value。在T-SQL命令中,判断⼀个值是不 是空值,要⽤“is null”⽽不是“= null”;处理空值有个ISNULL函数,它使⽤指定的值替换null。⽤ADO.NET从数据库得到的空值⽆法⾃动转化为空字符串或Nothing, 须⼿动检测:如果得到System.DBNull.Value,则赋给数据对象Nothing或其它⾃定义的有意义的值。
2:空字符串 (零长度字符串),只出现在字符串类型(如nvarchar)的字段中,SQL server中表⽰为’’,显⽰为空⽩,⼿⼯在SQL server企业管理器中输⼊时清空⼀个单元格即可。它在.NET中对应System.String.Empty,也就是我们常⽤的""。在T-SQL命 令中处理空字符串和处理⼀般的字符串没什么区别。⽤ADO.NET从数据库得到的空字符串也和⼀般的字符串没什么区别。
3. VB.NET中的Nothing; 它其实对应于C#.NET中的null(注意这个null是C#.NET中的null⽽⾮SQL Server中null),它们在.NET中是表⽰不引⽤任何对象的空引⽤的值,在传⼊
SQL server时,根据不同的上下⽂环境,可能存为真正的空值(⽐如在更新⼀个字符串类型的字段值时),也可能调⽤在SQL server中⾃定义的默认值(⽐如传给⼀个有默认值的存储过程参数),也
可能因为⽆法进⾏类型转换⽽引发.NET异常。因此在⽤ADO.NET 向SQL server中存储数据时,⼤家⼀定要⼩⼼使⽤Nothing。
4.undefined 值与 null 的区别是:
⼀般情况下, 下列情况可使⽤undefined值:
(1),对象属性不存在,
(2),声明了变量但从未赋值。
⽽释放引⽤,跟踪结果为变量值等操作使⽤ null.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论