Umgang mit Null-Typen von SQL in C#
Ich bin mit der SqlDataReader
um Werte aus einer SQL-Tabelle und ordnen Sie Ihre jeweiligen Variablen. Aber in meiner Tabelle int
und double
Spalten null-Werte. Also, wenn ich versuche zu Lesen ein null
int
und weisen Sie es zu einem int
variable, stürzt es ab.
Ist hier, wie die Werte zugeordnet:
public int ID { get; set; }
public int Map { get; set; }
public int TypeID { get; set; }
Und das ist, wo Sie gelesen werden:
while (objSqlDataReader.Read())
{
data= new data();
emissiondata.ID = (int)objSqlDataReader["EFID"];
emissiondata.Map = (int)objSqlDataReader["EFMappingID"];
emissiondata.TypeID =(SqlInt32)objSqlDataReader["MobileTypeID"];
So, wenn einer dieser ist null
, auch wenn ich Debuggen, stürzt er ab und kommt nicht weiter.
Wie gehe ich mit null
Werte in SQL und wie kann ich diesen leeren Werte zu meinem int
wenn es null
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
DBNull.Wert funktioniert auf DataTable Zeilen, ich bin mir nicht sicher, mit SqlDataReader:
Wenn Sie SqlDataReader ist GetSqlInt32,GetSqlDateTime, etc zum Beispiel, Sie sind null-bewusst out-of-the-box.
Statt unboxing:
Tun Sie dies statt:
Dann können Sie den test für null direkt:
Doch diese Methoden müssen Sie die Spalte ordinal-Zugang Wert. Sie können setup jene Ordnungszahlen, bevor Sie Ihren loop
Aber wenn Sie wirklich wollen, C#'s null, Sie machen eine Hilfsfunktion für Sie statt:
Zugriff mit Ihrem nullable-variable:
Können Sie nun testen, null direkt:
Einer Beratung, versuchen Sie, ändern Sie Ihre Klasse' Eigenschaften von nullable-Typen, was die Notwendigkeit für Sie zu verwenden Sie eine andere variable:
Endgültige code:
Kann nicht jetzt testen, aber können Sie versuchen, mit
int?
, die null-Werte zulässtint
. Es ist eine Kurzform fürNullable<Int32>
. WennobjSqlDataReader
umgewandelt werden kannint?
ändern Sie Ihre Felderint?
und fügen Sie zusätzliche Logik, um die Eigenschaft setter, wenn Sie etwas tun müssen, wenn Ihr Wert null ist.So, finden eine mögliche Antwort, die ich schauen Sie in die Dokumentation für die Klasse, die Sie zu reden: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx
Es gibt eine IsDBNull-Methode. Nicht mit C# um, sollte dies funktionieren:
Könnten Sie tun dies in der Abfrage selbst. In Oracle ist die Funktion
NVL()
. Sieht aus wie du bist mit MS Sql-Server, der verwendet:Verwendung und syntax für andere RDBMS ist hier: http://www.w3schools.com/sql/sql_isnull.asp
int
primitiv.int
.int
ist eine Zahl. Immer.Ich weiß, das ist alt, aber wenn Sie benötigen diese Antwort nach 2016-07-14:
Wenn SQL-Typ int, null
Mit int? als Datentyp.
int? wird eine "nullable" int " - also bei SQL gibt NULL für eine Spalte, den Wert der Eigenschaft erhält den Wert null.