Benutzer mit den meisten Antworten
DB NULL abfangen

Frage
-
Hallo,
ich habe eine frage zu einer Datenübernahme.
Wenn ich folgenden Code ausführe liest er aus einer DBF Datenbank die daten aus und convertiert sie mir gleich in eine Variable. Allerdings wenn in der Datenbank der Wert NULL auftritt bekomme ich einen Run-Time-Error.
Ich habe zwar schon einen Lösungsansatz, doch würde mich interessieren ob man das nicht irgendwie vereinheitlichen kann?!
DateTime Buchungsdatum = new DateTime();
bool Datum = false;
if (!Convert.IsDBNull(DataReader["BDATUM"]))
{
Buchungsdatum = DataReader.GetDateTime(DataReader.GetOrdinal("BDATUM"));
Datum = true;
}
int Buchungszeit = Convert.ToInt32(DataReader["BZEIT"]);
int Belegnr = Convert.ToInt32(DataReader["BBELEGNR"]);
int Buchungskonto_ID = Convert.ToInt32(DataReader["BKONTO"]);
decimal Buchungsbetrag = Convert.ToDecimal(DataReader["BBETRAG"]);
decimal Buchungssteuer = Convert.ToDecimal(DataReader["BSTEUER"]);
string BruttoNetto = DataReader["BN"].ToString();
int BezugPatient_ID = Convert.ToInt32(DataReader["BEZUG"]);
string Buchungstext = DataReader["BTEXT"].ToString();
int Buchungsgruppe = Convert.ToInt32(DataReader["BGRUPPE"]);
bool E_Wirksam = Convert.ToBoolean(DataReader["BEWIRK"]);
bool U_Wirksam = Convert.ToBoolean(DataReader["BUWIRK"]);
bool G_Wirksam = Convert.ToBoolean(DataReader["BGWIRK"]);
string Buchungsart = DataReader["BART"].ToString();
bool Storniert = Convert.ToBoolean(DataReader["BSTORNO"]);
string Honorar_ID = DataReader["HONNUMMER"].ToString();Währe wirklich sehr dankbar wenn es hierfür eine Lösung gebe.
Mit freundlichen Grüßen
Christian Rois
Antworten
-
Z.B.:
Buchungsdatum = (DateTime)(dataReader["BDATUM"] == DBNull.Value ? null : dataReader["BDATUM"]); Buchungsbetrag = (decimal)(dataReader["BBETRAG"] == DBNull.Value ? null : dataReader["BBETRAG"]);
Wobei ich es gleich in eine Klasse oder ein Struct einlesen würde.- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:35
-
Hi,
bei Stefans Vorschlag wird ein datetime ein NULL zugewiesen, das klappt nicht ;-)
Wie wäre es zB mit :
DateTime Buchungsdatum = new DateTime(); Buchungsdatum = DataReader["BDATUM"].GetType() != typeof(DBNull) ? DataReader.GetDateTime("BDATUM") : new DateTime(1800,1,1); oder if(DataReader["BDATUM"].GetType() != typeof(DBNull)) Buchungsdatum = DataReader.GetDateTime("BDATUM");
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:35
-
Ok, ich dachte du kannst davon die Antwort ableiten : Ich meine das so :
Buchungskonto_ID = DataReader["BKONTO"].GetType() != typeof(DBNull) ? DataReader.GetInt32("BKONTO") : -1
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:22
-
Stimmt, bei mir ist in diesem Fall der Datentyp ja auch DateTime?. Das habe ich unterschlagen: Nullable Types.
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:22
-
Hi christian , gerne :
Buchungskonto_ID = DataReader["BKONTO"].GetType() != typeof(DBNull) ? DataReader.GetInt32("BKONTO") : -1
Die Schreibweise Bedinung ? Wenn: Dann ist die einfache Form einer IF Else Verzweigung.
Im ersten Teil steht die Bedingung : Ist die Spalte BKONTO Ungleich ( != ) vom Typ DBNULL ?
Wenn Ja , hole mir den Int Wert von Spalte BKONTO , WENN nicht : setzte auf -1
So jetzt darfst du gerne alle Antworten die dir gehoilfen haben , als Antwort markieren ;-)Grüße
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:22
Alle Antworten
-
Z.B.:
Buchungsdatum = (DateTime)(dataReader["BDATUM"] == DBNull.Value ? null : dataReader["BDATUM"]); Buchungsbetrag = (decimal)(dataReader["BBETRAG"] == DBNull.Value ? null : dataReader["BBETRAG"]);
Wobei ich es gleich in eine Klasse oder ein Struct einlesen würde.- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:35
-
Hi,
bei Stefans Vorschlag wird ein datetime ein NULL zugewiesen, das klappt nicht ;-)
Wie wäre es zB mit :
DateTime Buchungsdatum = new DateTime(); Buchungsdatum = DataReader["BDATUM"].GetType() != typeof(DBNull) ? DataReader.GetDateTime("BDATUM") : new DateTime(1800,1,1); oder if(DataReader["BDATUM"].GetType() != typeof(DBNull)) Buchungsdatum = DataReader.GetDateTime("BDATUM");
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:35
-
int Buchungszeit = 0; bool BZeit = false; if (!Convert.IsDBNull(DataReader["BZEIT"])) { Buchungszeit = DataReader.GetOrdinal("BZEIT"); BZeit = true; } int Belegnr = 0; bool Beleg = false; if (!Convert.IsDBNull(DataReader["BBELEGNR"])) { Belegnr = DataReader.GetOrdinal("BBELEGNR"); Beleg = true; } int Buchungskonto_ID = 0; bool BKonto = false; if (!Convert.IsDBNull(DataReader["BKONTO"])) { Buchungskonto_ID = DataReader.GetOrdinal("BKONTO"); BKonto = true; } decimal Buchungsbetrag = 0; bool Betrag = false; if (!Convert.IsDBNull(DataReader["BBETRAG"])) { Buchungsbetrag = DataReader.GetOrdinal("BBETRAG"); Betrag = true; } decimal Buchungssteuer = 0; bool Steuer = false; if (!Convert.IsDBNull(DataReader["BSTEUER"])) { Buchungsbetrag = DataReader.GetOrdinal("BSTEUER"); Betrag = true; } int BezugPatient_ID = 0; bool Pat = false; if (!Convert.IsDBNull(DataReader["BEZUG"])) { Buchungskonto_ID = DataReader.GetOrdinal("BEZUG"); Pat = true; } int Buchungsgruppe = 0; bool Gruppe = false; if (!Convert.IsDBNull(DataReader["BGRUPPE"])) { Buchungsgruppe = DataReader.GetOrdinal("BGRUPPE"); Gruppe = true; }
so hab ich das jez einmal gelöst.. allerdings ist dies ja nicht besonders "schön" weiß einer wie das kürzer geht? -
Ok, ich dachte du kannst davon die Antwort ableiten : Ich meine das so :
Buchungskonto_ID = DataReader["BKONTO"].GetType() != typeof(DBNull) ? DataReader.GetInt32("BKONTO") : -1
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:22
-
Stimmt, bei mir ist in diesem Fall der Datentyp ja auch DateTime?. Das habe ich unterschlagen: Nullable Types.
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:22
-
Als aller erstes wollt ich mich einmal für die rasche Antwort bedanken und sagen es Funktioniert fantastisch (:
Die boolischen Variablen sind unnötig. Ich hab es nur so gelöst sollte der Wert != DBNull sein so schreibt er es in die DB und wenn es DBNull ist dann einen bestimmten Wert..
das kann ich ja jetzt aber auch getrost weglassen.
Könnte mir nur vielleicht jemand sagen was genau da passiert?
Wie gesagt ich bin erst seit ca 1 Jahr dabei und probiere echt so gut und schnell wie möglich was zu lernen.
Vielen Dank trotzdem noch einmal!!!!!
-
Hi christian , gerne :
Buchungskonto_ID = DataReader["BKONTO"].GetType() != typeof(DBNull) ? DataReader.GetInt32("BKONTO") : -1
Die Schreibweise Bedinung ? Wenn: Dann ist die einfache Form einer IF Else Verzweigung.
Im ersten Teil steht die Bedingung : Ist die Spalte BKONTO Ungleich ( != ) vom Typ DBNULL ?
Wenn Ja , hole mir den Int Wert von Spalte BKONTO , WENN nicht : setzte auf -1
So jetzt darfst du gerne alle Antworten die dir gehoilfen haben , als Antwort markieren ;-)Grüße
- Als Antwort markiert Christian Rois Dienstag, 30. August 2011 07:22