2016-05-04 22 views
2

Ich versuche eine Methode zu erstellen, die eine Zeichenfolge aus meiner DB zurückgibt, die meine Bedingungen erfüllt.So erkennen Sie ein leeres Zugriffsfeld mit Datenleser C#

Die erste Bedingung funktioniert. Aber die zweite Bedingung ist, dass ein Teil des Eintrags im Zugriff leer ist, mindestens ein Feld.

Dies ist mein Code:

OleDbCommand datacommand = new OleDbCommand(); 
datacommand.Connection = dataConnection; 
datacommand.CommandText = "SELECT numNumber, numLocation " + 
          "FROM  tblNumbers " + 
          "ORDER BY numID "; 
OleDbDataReader dataReader = datacommand.ExecuteReader(); 
while (dataReader.Read()) 
{ 
    if (MatchServiceLetters(dataReader.GetString(0))) // && dataReader.GetInt32(1) == null?/) 
} 
return dataReader.GetString(0); 

Wenn das int Feld leer ist, wird der Vergleich zu null nicht funktioniert. Wie kann ich wissen, ob es leer ist?

+1

'DBNull' dein Freund. – t0mm13b

+1

können Sie IsNull verwenden: ISNULL (check_expression, ersatzwert) – Sorceri

+0

t0mm13b Sie sind mein Held. –

Antwort

0

Von MSDN:

keine Konvertierungen durchgeführt werden; Daher müssen die abgerufenen Daten bereits eine 32-Bit-Ganzzahl mit Vorzeichen sein. Rufen Sie IsDBNull auf, um vor dem Aufruf dieser Methode nach Nullwerten zu suchen.

So verwenden Sie:

if(!dataReader.IsDBNull(1)) 
{ 
    return dataReader.GetInt32(1); 
} 
else 
{ 
    return 0; // or better yet, make your method return Nullable<int> 
} 
+1

Sie können all das mit IsNull (numNumber, 0) ersetzen und es wird alles von SQL behandelt – Sorceri

+0

@Sorceri das ist wahr, aber Sie beginnen, Bedenken dort zu mischen. Es ist nicht unüblich, dass Sprocs wiederverwendet werden, was ein Problem verursachen kann, wenn NULL ein gültiger Wert für diese Spalte ist. Im Allgemeinen ist es keine gute Idee, magische Werte zu verwenden, um fehlende Daten darzustellen (daher der Vorschlag, Nullable-Typen zu verwenden). – DVK