2016-11-30 2 views
1

Ich habe an einem Backend gearbeitet, d. H. Im Sql-Server 2012. Ich habe ein Feld als Date in der Tabelle deklariert, d. H. ParawiseDate datetime.Warum Datum eingereicht nicht Null aber 1900-01-01 nimmt?

Und ich vorbei eine NULL, um es von C# d

sqlcom.Parameters.AddWithValue("@ParawiseDate", NULL); 

Problem:

Es speichert die Daten als 1900-01-01 statt NULL. Ich versuchte "" und wurde auch als 1900-01-01 gespeichert.

Warum?

+1

Was ist 'NULL'? 'NULL' ist kein C# -Schlüsselwort. – Dai

+0

Vermeiden Sie auch 'AddWithValue', da die Typinferenz nicht immer genau ist. Geben Sie immer einen expliziten 'SqlDbType'-Wert an. – Dai

Antwort

0

Ich glaube für DateTime, können Sie den Typ mit "?" , Sonst würden sie zu 1900-01-01

DateTime ? Parameter; 

Auch Standard versuchen in

typeof(System.DateTime) 

statt NULL vorbei, auf dem zweiten Parameter

+0

ich tat. Ich tat bereits – Stacky

+0

keine Wirkung, immer noch gleich – Stacky

+0

Ich sehe, tut mir leid, tut Typeof (System.DateTime) – user5215286

1

Stellen Sie sicher, es Nullwerte in ParawiseDate Spalte zulassen .Auch statt vorbei Null versuchen DBNull.Value

sqlcom.Parameters.AddWithValue("@ParawiseDate", DbNull.Value); 
+0

Lol, zur gleichen Zeit veröffentlicht. Nun, das ist, was er bekommt, der Standardwert von Date. Bei dieser Methode gibt es keine Nullwerte, das wären Standardwerte. – Swift

0

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 .

0
SELECT cast(NULLIF(t.[ParawiseDate],'') AS DATE) 
FROM tablename t 
Verwandte Themen