首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecuteScalar的DBNull检查

ExecuteScalar的DBNull检查
EN

Stack Overflow用户
提问于 2014-01-15 17:44:49
回答 3查看 9.7K关注 0票数 6

命令的存储过程可以返回null.Is,这是检查返回值是否为空的正确方法,或者我是否也应该检查obj为空?

代码语言:javascript
复制
object obj = command.ExecuteScalar();
int id = -1;
if (DBNull.Value == obj)
{
   id = Convert.ToInt32(obj );
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-15 17:48:00

您可能希望将if语句更改为

代码语言:javascript
复制
if (obj != null && DBNull.Value != obj) { 
    ... 
}

现在,您正在尝试转换if obj == DBNull.Value

票数 13
EN

Stack Overflow用户

发布于 2014-01-15 17:49:21

如果没有结果,您的查询可能会返回null,因此在一般情况下,您应该检查它。例如:

代码语言:javascript
复制
SELECT TOP 1 Col1 FROM TABLE WHERE ...

上面的查询可以返回:

如果没有与WHERE clause

  • DBNull.Value匹配的行,则为
  • null;如果第一个匹配的行在Col1
  • 中具有NULL值,则返回

;否则返回非NULL值

如果您的查询可以保证总是会有结果,那么您只需要检查DBNull。例如。

代码语言:javascript
复制
SELECT MAX(Col1) FROM TABLE WHERE ...

如果没有与WHERE子句匹配的行,上述查询将返回DBNull.Value。它从不返回null

当然,在某些情况下,您可以保证非null结果,在这种情况下,您不需要测试null或DBNull。例如。

代码语言:javascript
复制
SELECT COUNT(Col1) FROM TABLE WHERE ...
SELECT ISNULL(MAX(Col1),0) FROM TABLE WHERE ...

上面的查询总是返回一个非空值。它从不返回nullDBNull.Value

票数 4
EN

Stack Overflow用户

发布于 2014-01-15 18:07:08

使用System.DBNull.Value。检查此链接http://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx

试试这个:

代码语言:javascript
复制
if(DBNull.Value != obj)
{
 ....
 .... 
}  

这是NullDBNull之间的区别。What is the difference between null and System.DBNull.Value?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21133888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档