命令的存储过程可以返回null.Is,这是检查返回值是否为空的正确方法,或者我是否也应该检查obj为空?
object obj = command.ExecuteScalar();
int id = -1;
if (DBNull.Value == obj)
{
id = Convert.ToInt32(obj );
}发布于 2014-01-15 17:48:00
您可能希望将if语句更改为
if (obj != null && DBNull.Value != obj) {
...
}现在,您正在尝试转换if obj == DBNull.Value。
发布于 2014-01-15 17:49:21
如果没有结果,您的查询可能会返回null,因此在一般情况下,您应该检查它。例如:
SELECT TOP 1 Col1 FROM TABLE WHERE ...上面的查询可以返回:
如果没有与WHERE clause
DBNull.Value匹配的行,则为null;如果第一个匹配的行在Col1;否则返回非NULL值
如果您的查询可以保证总是会有结果,那么您只需要检查DBNull。例如。
SELECT MAX(Col1) FROM TABLE WHERE ...如果没有与WHERE子句匹配的行,上述查询将返回DBNull.Value。它从不返回null。
当然,在某些情况下,您可以保证非null结果,在这种情况下,您不需要测试null或DBNull。例如。
SELECT COUNT(Col1) FROM TABLE WHERE ...
SELECT ISNULL(MAX(Col1),0) FROM TABLE WHERE ...上面的查询总是返回一个非空值。它从不返回null或DBNull.Value。
发布于 2014-01-15 18:07:08
使用System.DBNull.Value。检查此链接http://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx
试试这个:
if(DBNull.Value != obj)
{
....
....
} 这是Null和DBNull之间的区别。What is the difference between null and System.DBNull.Value?
https://stackoverflow.com/questions/21133888
复制相似问题