Frage

Ich verwende einen Datensatz Daten aus einer DB zu ziehen. Eines der Felder in einer Zeile ist NULL. Ich weiß das. Allerdings wirft der folgende vb.net Code ein StrongTypingException (in der automatisch generierte get_SomeField () -Methode im Daten-Set-Designer):

If Not IsDBNull(aRow.SomeField) Then
'do something
End If

Dokumentation Nach und sollte es in Ordnung sein.

edit: If aRow.SomeField is DBNull.Value Then gibt auch den gleichen Fehler. Argh.

War es hilfreich?

Lösung

Der Unterschied ist, dass in der entsprechenden Frage sie über einen nicht typisierten Wert spricht (das heißt object) über einen Indexer. Wenn Sie über .SomeField gehen, ist die Art bereits enthalten - so diese int usw. sein könnte und es würde keinen Sinn machen IsDBNull auf einem int zu versuchen, als int können nie sein DBNull

Im Wesentlichen die SomeField ist ein Wrapper für (entschuldigen Sie den C # Akzent ...)

public int SomeField {
    get { return (int) this["someFieldName"]; }
    set { this["someFieldName"] = value; }
}

Ich bin keine große DataTable Person, aber sie versuchen, es nach Namen / index / Spalte Überprüfung könnten; oder Markierung, die Säule als NULL festlegbaren, so dass es Nullable<int> (im Beispiel oben).

Andere Tipps

Nur ein paar zusätzliche Informationen: Die Ausnahme kommt, weil Sie ein stark typisierte DataSet verwenden. StrongTypingException Dokumentation heißt es:

Die Ausnahme, die von einem stark typisierte DataSet wird ausgelöst, wenn der Benutzer greift auf einen DBNull Wert.

Die Verwendung von stark typisierte Datasets ist etwas anders als die der nicht typisierten diejenigen. Mit stark typisierte Datasets erhalten Sie automatisch einige erweitert / zusätzliche Methoden für die Felder, die Sie anrufen können. In Ihrem Fall würden Sie sehr wahrscheinlich rufen müssen:

If Not aRow.IsSomeFieldNull Then
   'do something
End If

Versuchen Sie folgendes: aRow.IsSomeFieldNull

Es ist eine nette Art und Weise um ihn herum gehen. Aber Sie müssen sich bewusst Folgen.

Um zu verhindern, außer auftreten Sie in Datasetfeld Eigenschaft Nullvalue entweder auf „Null“ oder „Empty“ ändern können (alles nach Ihren Bedürfnissen). Standard wird auf „Exception werfen“.

Für einen Referenz Blick hier: Msdn Dokumentation

Viel Glück.

**DateTime? ToDate = (row.IsToDateNull()) ? null : row.IsToDate;**

Diese Frage ist alt, aber was ich hinzufüge, scheint nicht in eine der anderen Antworten zu sein.

Wenn Sie

If Not IsDBNull(aRow.item("SomeField")) Then
    'do something
End If

Dies wird eine Ausnahme nicht einmal werfen, wenn Sie einen stark verwenden typisierte Datasets

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top