【发布时间】:2013-11-08 08:39:10
【问题描述】:
ExecuteScalar() 有时会返回空对象 -not null- 尽管记录存在。当我用 quickwatch 分析这个对象时,我看到object.GetType() 等于DbNull。
我可以处理这个空对象,但我需要知道为什么它有时会返回空对象,尽管记录存在。
string sql = @"SELECT SentDate
FROM dbo.EmailOut
WHERE ID = @ID";
SqlCommand cmd = new SqlCommand(sql, _cnn);
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@ID", ID));
object obj = cmd.ExecuteScalar();
if (obj == null)
return false
sentDate = (DateTime)obj;
cmd.Dispose();
大多数情况下,我的查询都能完美运行。你能检查我的代码吗?
【问题讨论】:
-
那个“空”对象是 null。
-
记录可能存在,但
SentDate列可能是null? -
希望这只是一个示例,但您应该将
SqlCommand包装在using语句中 -
发送日期列不为空。我确定。很奇怪
-
@SecretSquirrel:一般来说,是的。在这种情况下,它并不是非常糟糕,因为 SqlCommand.Dispose 本质上是一个空操作。但是,人们不应该习惯它,因为例如,不处理 OleDbCommand 或 SqlCeCommand 会造成麻烦。
标签: c# executescalar