DataRow - Behandlung leerer Zellen einer Access Datenbanktabelle.



  • Hallo,
    ich greife auf eine Access Datenbank zu.
    Die Spalte "myColumn" hat Integerwerte, aber nicht alle Einträge haben einen Wert, d.h. einige Zellen sind leer.
    Ein Zugriff auf diese, ala

    int number;
    number = (int)row["myColumn"];
    

    endet mit einer InvalidCastException und der Meldung

    beim umwandeln aus einer zahl muss der wert eine zahl sein, die kleiner als unendlich ist

    Da muss ich wohl mit try/catch und den Exceptions arbeiten, oder kann ich das auch anders abfangen?
    Hab das probiert:

    if ( null == (int)row["myColumn"] )
    

    funzt nicht
    ebenso

    if(Double.IsInfinity((double)row["myColumn"]))
    

    funzt auch nicht.

    MfG



  • ich hab bei mir den Wert in einer

    int?
    

    variable gespeichert.
    int? ist nullable, sollte den zweck erfüllen.
    auch vergleiche mit null sollten möglich sein.
    Hoffe ich konnte helfen.



  • Keithy schrieb:

    ich hab bei mir den Wert in einer

    int?
    

    variable gespeichert.
    int? ist nullable, sollte den zweck erfüllen.
    auch vergleiche mit null sollten möglich sein.
    Hoffe ich konnte helfen.

    Nein, wie schon erwähnt, die beiden Versuche von mir führen zu der bereits zitierten Fehlermeldung.



  • Kann leider grad mit keiner Access DB aufwarten.
    Meine MSSql Datenquelle hat auch Integerwerte, die null sein können.
    dafür habe ich etwas in der Art verwendet:
    http://msdn.microsoft.com/en-us/library/2cf62fcy(VS.80).aspx

    Dein problem hörte sich so an, als würdest du Integerwerte bekommen,
    die zum Teil aber auch sql-null sind, also leer.
    Int32 kannst du aber nullable machen (sh.link).

    LG


  • Administrator

    Was gibt denn der Indexer der Klasse von row für einen Typ zurück?
    Kann es sein, dass da ein Double zurückgegeben wird, welcher auf NaN steht?
    Also schon mal mit Double.IsNaN geprüft?

    Grüssli



  • Achso, ich habe erst garnicht verstanden, was du mit int? meinst!
    Jedenfalls habe ich es jetzt so gelöst:

    if(System.DBNull.Value != row["myColumn"])
        my_value = (T)row["myColumn"];
    

    Ich darf also nur dann casten, wenn die Datenzelle nicht leer ist,
    wobei ich das T mit dem entsprechenden Datentypen (int, string, etc) ersetze.

    Danke und Gruß.


Anmelden zum Antworten