Typisiertes Dataset und DBNull

21/06/2010 - 17:15 von Fred Aurich | Report spam
Hallo,

dadurch, dass ich (jetzt) typisierte DataRow's manuell erstelle (NewRow()),
habe ich gleich das nàchste Problem.

Standardmàßig scheinen alle Spalten, die durch die newRow()-Methode einer
Datatable erstellt wurden, den Datentyp DBNull zu

erhalten.

Wenn jetzt lesend auf eine Spalte zugegriffen wird kommt es in einem
typisierten Dataset zu einer Data.StrongTypingException, da

durch den Designer folgender Code zB. (automatisch) erstellt wird:

public int nPersonNo {
get {
try {
return
((int)(this[this.tableView_Mitglieder.nPersonNoColumn]));
}
catch (global::System.InvalidCastException e) {
throw new
global::System.Data.StrongTypingException("Der Wert für Spalte nPersonNo in
Tabelle

View_Mitglieder ist DBNull.", e);
}

Wenn ich im Designer ein Datatable-Adapter definiere, fange ich alle
Null-Werte per SQL ab (isNull()). Heist dass, das ich jetzt

alle Spalten der DataRow erst einmal durchgehen muss, den Datentyp ermitteln
muss und dann mit Standardwerten füllen muss, damit

ich ohne Exception die Spalten lesen kann???? Oder gibt es irgendwo einen
Schalter: Erstelle typisiertes Dataset ohne DBNull

Exception Abfrage??
 

Lesen sie die antworten

#1 Elmar Boye
21/06/2010 - 18:06 | Warnen spam
Hallo Fred,

Fred Aurich schrieb:
dadurch, dass ich (jetzt) typisierte DataRow's manuell erstelle (NewRow()),
habe ich gleich das nàchste Problem.



wie bereits dort gesagt, wenn man den Kern der Aufgabe sehen würde,
wàre sicherlich ein besserer Lösungsansatz zu finden.

Standardmàßig scheinen alle Spalten, die durch die newRow()-Methode einer
Datatable erstellt wurden, den Datentyp DBNull zu erhalten.



So wird es generiert, man kann aber im Designer einen Standardwert
festlegen. Was allerdings die Automatiken auf den Kopf stellt.
Und i. a. ist es besser, bereits auf Datenbank-Ebene nur dort NULL
zu verwenden, wo man es explizit benötigt und in allen anderen Fàllen
mit einen Standardwert (bei Integer z. B. 0) zu arbeiten.

Ich deklariere üblicherweise nur Fremdschlüssel als NULL
und für so ziemlich alles andere NOT NULL und dazu eine
DEFAULT Einschrànkung.

Wenn jetzt lesend auf eine Spalte zugegriffen wird kommt es in einem
typisierten Dataset zu einer Data.StrongTypingException, da

durch den Designer folgender Code zB. (automatisch) erstellt wird:

public int nPersonNo {
get {
Wenn ich im Designer ein Datatable-Adapter definiere, fange ich alle
Null-Werte per SQL ab (isNull()). Heist dass, das ich jetzt



Zusàtzlich erzeugt ein typisiertes DataSet zusàtzlich eine Eigenschaft
mit dem <Spaltenname>IsNull, für oben "nPersonNoIsNull".
Willst Du keine Exception, erfordert das DataSet ein Kodieren wie

int personNo = 0;
if (!row.nPersonNoIsNull())
nPersonNo = row.nPersonNo

oder mit Nullable Typen
http://msdn.microsoft.com/de-de/lib...y8s4s.aspx
int? personNo = null;
if (!row.nPersonNoIsNull())
nPersonNo = row.nPersonNo

Gruß Elmar

Ähnliche fragen