SqlDataReader没有数据,但HasRow为真
问题描述:
我从SQL数据库读取数据的方法是ExecuteReader()。 没有数据的条件,但是HasRow返回true。当我尝试从阅读器读取数据时,我得到了异常: '数据为空。无法在Null值上调用此方法或属性。'SqlDataReader没有数据,但HasRow为真
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
try
{
if (reader.Read())
{
string aa = reader.GetFieldType(0).Name; // aa returns 'DateTime'
dateStart.MinDate = reader.GetDateTime(0); //exception on this line
dateEnd.MinDate = reader.GetDateTime(0);
dateStart.Value = reader.GetDateTime(0);
}
}
finally
{
reader.Close();
}
在此先感谢 Usjwo
答
如果内部零指数SqlDataReader
数据包含DBNull
,你不能直接从它使用GetDateTime
方法,因为DBNull.Value
不能直接转换为DateTime
。你可以检查它使用IsDBNull
与三元运营商&一个Nullable<DateTime>
变量存储GetDateTime
结果分配给其他属性之前(另见本example):
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
try
{
while (reader.Read())
{
DateTime? minDate = reader.IsDBNull(0) ? (DateTime?)null : reader.GetDateTime(0);
if (minDate != null)
{
dateStart.MinDate = minDate.Value;
dateEnd.MinDate = minDate.Value;
dateStart.Value = minDate.Value;
}
}
}
finally
{
reader.Close();
}
}
}
有你'检查值,如果(reader.IsDBNull(0) )'还是三元运算符?如果相应的字段值为空,则不能使用'GetDateTime'。 –
这可以帮助你----> [数据为空。此方法或属性无法在空值上调用](https://stackoverflow.com/questions/24581305/data-is-null-this-method-or-property-cannot-be-called-on-null-values-使用com) – Jixone
非常感谢!有用 :) – Usjwo