Null-Werte aus Datenbank abfangen
-
Guten Morgen
Wenn wir SQL-Anweisungen haben, um Daten aus der DB auszulesen sieht das manchmal wie folgt aus:
while (dr.Read()) { adresse.Add(new Adresse { Name = dr.GetString(0), Ort = dr.GetString(1) }); .... }
Um die Null-Werte abzufangen, müssten wir ja für jedes Feld sowas in der Art schreiben:
if (dr.IsDBNull(0) == false) ...
und das für jedes Feld ...
Gibt es eine Möglichkeit, dass man nicht jedes Feld extra prüfen muss bzw. dass die Methode fortgesetzt wird, auch wenn ein Null-Wert enthalten ist??
Ich hoffe, das es einigermaßen verständlich ist, was unser Problem ist?!
Danke Euch!
-
Macht doch einfach die Spalten not-nullable?
-
LordJaxom schrieb:
Macht doch einfach die Spalten not-nullable?
Du meinst in der Datenbank selbst?
-
Waschmolch schrieb:
Um die Null-Werte abzufangen, müssten wir ja für jedes Feld sowas in der Art schreiben:
if (dr.IsDBNull(0) == false) ...
und das für jedes Feld ...
Ich hatte früher auch mit ähnlichen Problemen zu kämpfen.. ich habe mir dann mal einen Satz Extension-Methoden geschrieben. Beispiel für die SafeToString-Methode:
public static class DataRecordExtensions { public static string SafeToString(this IDataRecord record, string fieldName) { return record.SafeToString(record.GetOrdinal(fieldName)); } public static string SafeToString(this IDataRecord record, string fieldName, string defaultValue) { return record.SafeToString(record.GetOrdinal(fieldName), defaultValue); } public static string SafeToString(this IDataRecord record, int index) { return record.SafeToString(index, ""); } public static string SafeToString(this IDataRecord record, int index, string defaultValue) { if (record.IsDBNull(index)) return defaultValue; return record.GetString(index); } }
Edit:
Aufruf ist dann:while (dr.Read()) { string myString = dr.SafeToString("columnName"); }
-
Genau, in der Datenbank selbst.
Wenn beim Lesen egal ist, ob Null oder "" drinsteht, bzw. Null zu "" zerfallen soll, dann solltet ihr garnicht erst zulassen, dass Null oder "" in die Datenbank gelangen. Legt einen der beiden Zustände für "leer" fest (der Einfachheit halber "") und nutzt nur diesen.
-
Man kann auch "ISNULL(spalte, ersatzwert)" in die Abfrage reinschreiben.
Bzw. die Variante von GPC ist auch ein guter Ansatz.
In unseren Server-Programmen (C++, ändert diesbezüglich aber nix) haben wir das auch immer so (GPC-Variante) gemacht.