Forums Neueste Beiträge
 

SqlDataReader und NULL Werte

21/04/2008 - 17:33 von Simon Kurz | Report spam
Hallo,

ich mache eine Abfrage und durchlaufe sie mit dem SqlDataReader.
Dabei baue ich mir für die Daten einen OdbcCommand.CommandString zusammen.
Nun habe ich ein Problem mit den null Werten. Wie kann ich prüfen, ob in der
aktuellen Spalte ein Null Wert steht?

bei einem Int mache ich es so:

int wertInt;
StringBuilder odbcString = new StringBuilder(vorgabestring);
if (int.TryParse(sqlReader["Spalte1"].ToString(), out wertInt))
{
odbcString.Replace("Spalte1", wertInt.ToString());
}
else
{
odbcString.Replace("Spalte1"null");
}

Wie kann ich das ganze auf eine Spalte mit varchar oder String übertragen?
ich habe es schon mit
if (sqlReader["Spalte2"].GetType() == System.DBNull )
{...
usw. versucht , aber das geht nicht.
In meinem ODBC String muß für einen NULL Wert ein "null" (ohne Hochkomma)
stehen.

Vielen Dank für Hinweise und Tipps. Vielleciht bin ich ja auch auf dem
komplett falschen weg und es geth viel eleganter.
 

Lesen sie die antworten

#1 Elmar Boye
21/04/2008 - 19:29 | Warnen spam
Hallo Simon,

Simon Kurz schrieb:
ich mache eine Abfrage und durchlaufe sie mit dem SqlDataReader.
Dabei baue ich mir für die Daten einen OdbcCommand.CommandString zusammen.



Zusammengefaßt möchtest Du also die Daten aus dem SQL Server
an einen ODBC Provider weitergeben.

Nun habe ich ein Problem mit den null Werten.
Wie kann ich prüfen, ob in der aktuellen Spalte ein Null Wert steht?



Mit IDataRecord.IsDbNull().

bei einem Int mache ich es so:



Bitte nicht... ich habe mich für heute genug geschüttelt ;-))

Alle ADO.NET Provider müssen (ab .NET 1.1) mindestens die IData...
(IDataRecord, IDataParameter usw.) Schnittstellen unterstützen,
ab .NET 2.0 gibts zudem die Db... Basisklassen.
Dazu kommt als gemeinsames Datentyp-System die DbType Enumeration.
Dabei finden zwar ggf. auch Konvertierungen statt, die sind aber
allemal sicherer als Dein Parse(ToString()).ToString.

int wertInt;
StringBuilder odbcString = new StringBuilder(vorgabestring);



Anstatt dort die Spalten zu ersetzen, verwende eine entsprechende
Odbc Parameters Auflistung fürs Einfügen z. B.:
INSERT Tabelle (Spalte1, Spalte2) VALUES(?, ?)

Dann kannst Du zu Beginn die Parameters Auflistung des
ODBC erstellen - IDataReader.GetSchemaTable hilft dabei.

Das Übertragen beim Read eine Schleife über GetValue - DBNull
wird dabei schon automatisch berücksichtigt.
Falls die Spaltenreihenfolge abweicht, solltest Du Dir am Anfang
ein Array über GetOrdinal erstellen.

Und der Code dürfte auf ein/zwei Bildschirmseiten zusammenschrumpfen.

Gruß Elmar

Ähnliche fragen