C # Objekt Nullprüfung

8

Ich habe meine Datenbank mit DataReader gelesen.

und einige Zeilen haben keinen fdate-Wert.

Wenn ich das Nulldatum in DateTime umwandle, tritt ein Fehler auf.

Wie kann ich das Feld leer prüfen oder nicht?

%Vor%

Ich habe es mit Equals versucht, aber es funktioniert nicht.

kann jemand das Null-Objekt überprüfen, um Konvertierungsfehler zu vermeiden?

Danke!

    
Expert wanna be 19.04.2012, 19:42
quelle

6 Antworten

11

Da Sie von allen darauf hingewiesen wurden, wie Sie das Problem lösen können, versuche ich, Ihnen die Informationen darüber zu geben, was der Unterschied zwischen NULL und DBNull ist.

  • null und DBNull sind unterschiedlich.

  • null ist keine Instanz eines beliebigen Typs. DBNull ist eine Singleton-Klasse mit einer Instanz: DBNull.Value .

  • null stellt eine ungültige Referenz dar, wobei% DBNull.Value für einen nicht vorhandenen Wert in DB steht.

  • DBNull.Value ist, was db-Provider für einen nicht vorhandenen Wert in einer Tabelle angeben.

Mit diesem Hintergrund ist (reader["fdate"].Equals(null)) nicht korrekt hier zu verwenden. Sie müssen es mit DBNull.Value überprüfen. Wenn es vom Typ DBNull ist oder wenn es gleich DBNull.Value ist, dann weisen Sie den Wert zu, den Sie mögen.

    
Sandeep 19.04.2012, 19:45
quelle
5

Verwenden Sie DbNull:

Ссылка

    
Sunny 19.04.2012 19:44
quelle
4
___ answer10235629 ___

Da Sie von allen darauf hingewiesen wurden, wie Sie das Problem lösen können, versuche ich, Ihnen die Informationen darüber zu geben, was der Unterschied zwischen NULL und DBNull ist.

  • %code% und DBNull sind unterschiedlich.

  • %code% ist keine Instanz eines beliebigen Typs. DBNull ist eine Singleton-Klasse mit einer Instanz: %code% .

  • %code% stellt eine ungültige Referenz dar, wobei% %code% für einen nicht vorhandenen Wert in DB steht.

  • %code% ist, was db-Provider für einen nicht vorhandenen Wert in einer Tabelle angeben.

Mit diesem Hintergrund ist %code% nicht korrekt hier zu verwenden. Sie müssen es mit %code% überprüfen. Wenn es vom Typ %code% ist oder wenn es gleich %code% ist, dann weisen Sie den Wert zu, den Sie mögen.

    
___ answer10235605 ___

Verwenden Sie DbNull:

Ссылка

    
___ qstnhdr ___ C # Objekt Nullprüfung ___ antwort10235757 ___

In einer Situation wie dieser möchte ich Nullable-Datenbankspalten entweder mit einem Referenztyp (String für varchar) oder einem Nullable-Typ (DateTime?) darstellen. Auf diese Weise können Sie das Datenbankschema in Ihrem Programm genauer darstellen.

Damit können Sie die Konvertierungslogik auch im Format:

sauberer schreiben %Vor%

Dieser Cast wird fehlschlagen, wenn das Ergebnis des Datenreaders ein DbNull ist und fdate auf den Standardwert (DateTime?) gesetzt ist, was null ist. An diesem Punkt können Sie Ihren wirklichen gewünschten Wert erhalten, indem Sie überprüfen, ob der Nullable-Typ einen Wert hat oder nicht (fdate.HasValue), und wenn nicht, verwenden Sie Ihren Standard - DateTime.Today.

    
___ answer10235589 ___
%Vor%

Es scheint jedoch gefährlich zu sein, das Datum auf %code% zu setzen. Ich würde das stattdessen tun:

%Vor%

Wenn das zugrunde liegende TPE der %code% -Spalte bereits DateTime ist, verwenden Sie nicht System.Convert:

%Vor%     
___ answer10235592 ___

Versuchen Sie Folgendes:

%Vor%     
___ tag123aspnet ___ ASP.NET ist ein Framework für die Entwicklung von Microsoft-Webanwendungen, mit dem Programmierer dynamische Websites, Webanwendungen und Webdienste erstellen können. Es ist nützlich, dieses Tag in Verbindung mit dem Typ des Projekttyps zu verwenden, z. [asp.net-mvc], [asp.net-webforms] oder [asp.net-web-api]. Verwenden Sie dieses Tag NICHT für Fragen zu ASP.NET Core - verwenden Sie stattdessen [asp.net-core]. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123datareader ___ Ein DataReader liest einen Nur-Vorwärts-Stream von Zeilen aus einer Datenquelle. ___ answer10235638 ___
%Vor%     
___ qstntxt ___

Ich habe meine Datenbank mit DataReader gelesen.

und einige Zeilen haben keinen fdate-Wert.

Wenn ich das Nulldatum in DateTime umwandle, tritt ein Fehler auf.

Wie kann ich das Feld leer prüfen oder nicht?

%Vor%

Ich habe es mit Equals versucht, aber es funktioniert nicht.

kann jemand das Null-Objekt überprüfen, um Konvertierungsfehler zu vermeiden?

Danke!

    
___
medkg15 19.04.2012 19:54
quelle
2
%Vor%

Es scheint jedoch gefährlich zu sein, das Datum auf Today zu setzen. Ich würde das stattdessen tun:

%Vor%

Wenn das zugrunde liegende TPE der fdate -Spalte bereits DateTime ist, verwenden Sie nicht System.Convert:

%Vor%     
phoog 19.04.2012 19:43
quelle
1

Versuchen Sie Folgendes:

%Vor%     
mattytommo 19.04.2012 19:43
quelle
1
%Vor%     
Forte L. 19.04.2012 19:45
quelle

Tags und Links