ExecuteScalar这个方法本来的目的是只返回数据集的第一行第一列。
ExecuteScalar返回为空有2种情况:
情况一:没有找到记录。
注意:这时候有2种可能:返回值可能为DBNull.Value或者null
(1)第一列为字段名时,如
SELECT createtime FROM [sms] WHERE id=0
这时候如果没有记录,则返回值为null
(2)第一列为统计值时,
SELECT sum(countsms) FROM [sms] WHERE id=0
这时候如果没有记录,则返回值为DBNull,可以理解为,该返回是返回记录的,但返回的该字段的值为null
所以判断为空的时候,应该这样写:
var t=Database.ExecuteScalar(....);
if (t == DBNull.Value||t==null ) return 0;
情况二:有该条记录,但该记录的第一列的值为null
这时候返回值为DBNull