2017-08-23 2 views
0

Ich lese Daten von SQL-Datenbank von ExecuteReader(). Es gibt keine Daten erfüllen Bedingungen, aber HasRow gibt True zurück. Wenn ich versuche, Daten vom Leser zu lesen, bekam ich eine Ausnahme: 'Daten sind Null. Diese Methode oder Eigenschaft kann nicht für Null-Werte aufgerufen werden. 'SqlDataReader keine Daten, aber HasRow ist wahr

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(); 
      } 

Vielen Dank im Voraus Usjwo

+0

Haben Sie den Wert überprüft mit 'if (reader.IsDBNull (0)) 'oder ternärer Operator? Sie können 'GetDateTime' nicht verwenden, wenn der entsprechende Feldwert null ist. –

+0

Dies könnte Ihnen helfen ----> [Daten sind Null. Diese Methode oder Eigenschaft kann nicht für Nullwerte aufgerufen werden] (https://stackoverflow.com/questions/24581305/data-is-null-this-method-or-property-cannot-be-called-on-null-values- using-com) – Jixone

+0

Vielen Dank! Es klappt :) – Usjwo

Antwort

0

Wenn die Daten innerhalb Null-Index von SqlDataReader enthält DBNull, können Sie GetDateTime Methode nicht direkt von ihm verwenden, da DBNull.Value nicht direkt an DateTime gegossen werden kann. Sie können es IsDBNull mit ternären Operator & eine Nullable<DateTime> Variable überprüfen GetDateTime Ergebnis zu speichern, bevor (siehe auch dieses example) auf andere Eigenschaften zuweisen:

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(); 
     } 
    } 
} 
Verwandte Themen