Ich versuche den folgenden Code auszuführen, erhalte aber einen Casting-Fehler. Wie kann ich meinen Code umschreiben, um dasselbe zu erreichen?
%Vor%Danke
Überlegen Sie, ob Sie dies in einer Funktion tun.
Hier ist etwas, das ich in der Vergangenheit benutzt habe (Sie können dies zu einer Erweiterungsmethode in .net 4 machen):
%Vor%Bearbeiten
Als Erweiterung (nicht getestet, aber Sie haben die Idee) und Spaltennamen anstelle von Index verwenden:
%Vor%Verwendung:
%Vor%Ich bin mir sicher, dass ich die Inspiration dafür irgendwo im Interweb gefunden habe, aber ich kann die ursprüngliche Quelle nicht mehr finden. Wie auch immer, unten finden Sie eine Utility-Klasse, die es erlaubt, eine Erweiterungsmethode auf DataReader zu definieren:
%Vor%Verwendung:
%Vor%oder
%Vor%Hier ist die aktivierende Dienstprogrammklasse:
%Vor%EDIT: verwendet die IsNullableType () - Erweiterungsmethode, die wie folgt definiert ist:
%Vor% Hier ist meine Aufnahme einer Erweiterungsmethode. Spaltennamensemantik und fällt zurück auf default(T)
, wenn eine Null gefunden wird.
Hier ist die Beispielverwendung. Denken Sie daran, dass trotz string
als Referenztyp die Umwandlung in null
von DBNull
nicht möglich ist. Dasselbe gilt für int?
.
Denken Sie daran, dass ein DBNull nicht dasselbe ist wie null, sodass Sie nicht von einem zum anderen umwandeln können. Wie das andere Poster sagte, können Sie mit der IsDBNull () - Methode nach DBNull suchen.
Probieren Sie diese Version aus. Es führt einige grundlegende Konvertierungen durch und verwaltet auch Standardwerte.