2016-07-04 8 views
0

Mein aktueller while-Anweisung verwendet wird, aus einer Tabelle alle Werte zu erhalten (zwei Integer und einen String-Wert), und es sieht wie folgt aus:Wie DBNull.Value verwandt wird, um zu überprüfen, ob Tabellenspalte Null ist; Rückkehr Standardwert, wenn nicht null

    while (reader.Read()) 
       { 
        Int16 a = reader.GetInt16("id"); 
        **int b = (reader["nullable_id"] != DBNull.Value) ? Convert.ToInt16(reader["nullable_id"]): 0;** 
        string c = reader.GetString("string"); 
        Site page = new Site(a, b, c); 
        list.Add(page); 
       } 

Was ich bin mit zu tun ist, alle Werte in einer Tabelle abzurufen. Es gibt einen Primärschlüssel, einen Fremdschlüssel und einen regulären Zeichenfolgenwert (a, b bzw. c). Dies funktioniert gut, indem Sie mir erlauben, den Primär- und den String-Wert zu ziehen, während Sie den Fremdschlüssel ignorieren, der momentan Nullwerte hat. Wenn ich jedoch einen Wert der Fremdschlüssel von NULL auf 32 ändern würde, wird der Wert nicht zurückgegeben, wenn ich die GET-Methode ausführe.

Also meine Frage ist, wie überprüfe ich, ob der Fremdschlüssel null ist oder nicht und dann, wenn es nicht null ist, gibt es den Wert in der Datenbank gespeichert und wenn es null ist, dann verlässt es die Wert als null? Ich bin relativ neu mit der Verwendung von DBNull, so dass ich es möglicherweise falsch implementieren.

Antwort

0

einfache Änderung Verwendung dieses

while (reader.Read()) 
       { 
        Int16 a = Convert.ToInt16(reader["id"]); 

        int b = (!string.IsNullOrEmpty(Convert.ToString(reader["nullable_id"]))) ? Convert.ToInt16(reader["nullable_id"]): 0; 
        string c = Convert.ToString(reader["string"]); 
        Site page = new Site(a, b, c); 
        list.Add(page); 
       } 
+0

Ah, tatsächlich arbeiten beide Linien gut. Ich überprüfte, wo ich meine Getter/Setter definiert habe, und ich sah, dass ich ein Code-Snippet wie folgt ausprobierte, um anzugeben, dass der Wert nullfähig war: 'int? b {erhalten; einstellen; } '. Nachdem ich das in 'public int b {get; set} 'alles hat gut funktioniert; Die GET-Antwort gab 0 für null b-Werte und 32 für den einen Wert zurück, den ich änderte. Also, wir hatten beide recht. Ich musste nur mein Modell ändern. Danke für die Hilfe, ich werde deine Lösung als Antwort markieren! –

Verwandte Themen