Benutzer mit den meisten Antworten
Datentyp Date und Datenbanktyp smalldatetime

Frage
-
Hallo Leute,
ich habe einen SQL-Server der eine Tabelle "myTabelle" mit der Spalte "myDate" (Typ: smalldatetime) enthält.
Bei dieser Spalte sind Null-Werte erlaubt.
Dim newDate As Date = Nothing
Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = newDate
Cmd.CommandText = "UPDATE myTabelle SET myDate = @myDate WHERE ID = 1"
Cmd.ExecuteNonQuery()Da aber in newDate lt. Debugger der Wert "#12:00:00 AM#" steht (auch nach der Zuweisung von "Nothing"), bekomme ich die Fehlermeldung "SQLDateTime-Überlauf".
Eigentlich möchte ich nur, dass in myDate der Wert "NULL" eingetragen wird.
Wie kann ich das realisieren?
Vielen Dank im Voraus
Christian Tauschek
Antworten
-
Hallo Christian,
Dim newDate As Date = Nothing
Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = newDate
Cmd.CommandText = "UPDATE myTabelle SET myDate = @myDate WHERE ID = 1"
Cmd.ExecuteNonQuery()Da aber in newDate lt. Debugger der Wert "#12:00:00 AM#" steht (auch nach der Zuweisung von "Nothing")
Da DateTime ein Werttyp ist, kann dieser nie Nothing sein, sondern immer maximal '0' bzw. das definierte Basisdatum '01.01.0001 00:00:00'. Dieser Ausdruck wird vom Debugger entsprechend Deinen Regionaleinstellungen als Datum formatiert ausgegeben. Das Ergebnis ist bei Dir dann "#12:00:00 AM#".
Eigentlich möchte ich nur, dass in myDate der Wert "NULL" eingetragen wird.
Wie kann ich das realisieren?Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = DBNull.Value
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Christian Tauschek Sonntag, 17. Oktober 2010 14:13
-
Hallo Christian,
wenn Du in ADO.NET NULL zuweisen willst, verwende DBNull.Value . Hier:
Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = DBNull.Value
Der Überlauf kommt dadurch zustande, dass ein SmallDateTime nur
Werte ab dem 1.1.1900 zulässt, ein .NET DateTime fängt im Jahre 1 an.Die Zuweisung von Nothing wiederum bewirkt in Visual Basic, dass der Standardwert
für den Datentyp zugewiesen wird, was hier DateTime.MinValue entspräche, da es
sich bei DateTime um einen Werttyp (Structure) handelt.Gruß Elmar
- Als Antwort markiert Christian Tauschek Sonntag, 17. Oktober 2010 14:13
Alle Antworten
-
Hallo Christian,
Dim newDate As Date = Nothing
Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = newDate
Cmd.CommandText = "UPDATE myTabelle SET myDate = @myDate WHERE ID = 1"
Cmd.ExecuteNonQuery()Da aber in newDate lt. Debugger der Wert "#12:00:00 AM#" steht (auch nach der Zuweisung von "Nothing")
Da DateTime ein Werttyp ist, kann dieser nie Nothing sein, sondern immer maximal '0' bzw. das definierte Basisdatum '01.01.0001 00:00:00'. Dieser Ausdruck wird vom Debugger entsprechend Deinen Regionaleinstellungen als Datum formatiert ausgegeben. Das Ergebnis ist bei Dir dann "#12:00:00 AM#".
Eigentlich möchte ich nur, dass in myDate der Wert "NULL" eingetragen wird.
Wie kann ich das realisieren?Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = DBNull.Value
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Christian Tauschek Sonntag, 17. Oktober 2010 14:13
-
Hallo Christian,
wenn Du in ADO.NET NULL zuweisen willst, verwende DBNull.Value . Hier:
Cmd.Parameters.Add("@myDate", SqlDbType.SmallDateTime).Value = DBNull.Value
Der Überlauf kommt dadurch zustande, dass ein SmallDateTime nur
Werte ab dem 1.1.1900 zulässt, ein .NET DateTime fängt im Jahre 1 an.Die Zuweisung von Nothing wiederum bewirkt in Visual Basic, dass der Standardwert
für den Datentyp zugewiesen wird, was hier DateTime.MinValue entspräche, da es
sich bei DateTime um einen Werttyp (Structure) handelt.Gruß Elmar
- Als Antwort markiert Christian Tauschek Sonntag, 17. Oktober 2010 14:13