SqlDataReader没有数据,但HasRow为真

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

+0

有你'检查值,如果(reader.IsDBNull(0) )'还是三元运算符?如果相应的字段值为空,则不能使用'GetDateTime'。 –

+0

这可以帮助你----> [数据为空。此方法或属性无法在空值上调用](https://stackoverflow.com/questions/24581305/data-is-null-this-method-or-property-cannot-be-called-on-null-values-使用com) – Jixone

+0

非常感谢!有用 :) – 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(); 
     } 
    } 
}