2017-04-14 10 views
2

Ich versuche zu tun, was ich dachte, war eine ziemlich einfache Sache, aber habe Probleme. Ich habe Code in einer .NET-Anwendung, um einen neuen Datensatz mit SQLCommand in eine Tabelle einzufügen.Umgang mit möglicherweise null Datum-Zeit-Wert in einem SQLParameter

Ich übergebe, was könnte entweder ein Datetime-Wert sein oder es könnte null sein. Der folgende Code scheint nicht obwohl zu arbeiten:

command.Parameters.AddWithValue("@SettleDate", 
IIf(String.IsNullOrEmpty(SettleDate), Nothing, DateTime.Parse(SettleDate))) 

Wo „SettleDate“ ist eine Zeichenfolge, die ein Datum enthält, die null sein könnte. Ich würde denken, dieser Code abdecken würde den Zustand der nicht einen Nullwert zu analysieren versucht, aber wenn es laufe ich die folgende Fehlermeldung erhalten, die von der DateTime.Parse Methode sein, sieht:

String reference not set to an instance of a String. 
Parameter name: s 

Wie kann das sein ? Wenn "SettleDate" null ist, sollte es niemals die Parse-Methode erreichen.

Antwort

0

Sie sollen den Kurzschluss opertator von VB.NET verwenden zusammen mit DBNull.Value

If(String.IsNullOrEmpty(SettleDate), DBNull.Value, DateTime.Parse(SettleDate))) 

The IF operator, im Gegensatz zu IIF Funktion nicht versucht, beiden Seiten des Ausdrucks zu bewerten, wenn die erste wahr ist . Beachten Sie auch, dass Sie DbNull.Value verwenden, um einen Nullwert an einen SqlParameter zu übergeben.

+0

Ah, das ist eine sehr subtile Sache, die ich nicht realisiert hatte. Vielen Dank. – DeveryDay

Verwandte Themen