Es ist wichtig, zu wissen, was binar y Darstellung der Daten ist und welche Umwandlungen erlaubt sind. Ohne dies ist jeder Programmierer etwas blind. In diesem Fall ist der Standarddatumswert in MS SQL 1900-01-01. In älteren CLR AddWithValue mit DBNull.Value als ein Wert war äquivalent zu Einstellung Feld als Standard. Ich habe nicht 4.0 CLR-Umgebung behandelt, aber ich kann erwarten, dass NULL zu DBNull gegossen werden konnte? In jedem Fall ist es kein Datumswert oder wenn NULL implizit mit einem Standardwert in Date gegossen werden könnte? (Letzteres würde sagen, dass MS wieder weg von Standards geht, NULL muss nun gleich dem Zeiger auf irgendein Objekt sein) Wahrscheinlich ein undokumentierter Nebeneffekt.
public SqlParameter AddWithValue(
string parameterName,
object value
)
Parameter
parameterName
Typ: System.String
Der Name des Parameters.
value
Typ: System.Object
Der Wert hinzugefügt werden. Verwenden Sie DBNull.Value
anstelle von null, um einen Nullwert anzugeben.
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx
Datum und Datetime kann nicht NULL sein kann, obwohl Feld in der Tabelle NULL-Werte zu ermöglichen, eingestellt werden. Das Lesen von Daten würde normalerweise dazu führen, dass der Standardwert aus Sicherheitsgründen erreicht wird. Das erfordert eine separate Überprüfung (isDBNull?)
Nur zulässige Werte für das Datum in SQL (mindestens Microsoft-Geschmack) sind 0001-01-01 bis 9999-12-31, die explizit angegeben werden sollten, andernfalls würde ein Standardwert verwendet werden .
Was ist 'NULL'? 'NULL' ist kein C# -Schlüsselwort. – Dai
Vermeiden Sie auch 'AddWithValue', da die Typinferenz nicht immer genau ist. Geben Sie immer einen expliziten 'SqlDbType'-Wert an. – Dai