Hallo,
ich versuche eine Tabelle über ein OleDBCommand Objekt zu updaten.
Das ganze klappt eigentlich auch ganz prima bis darauf das ich versucht habe einem Feld = NULL zuzuweisen.
Hier meine Function
Public Function UpdateVenDS(ByVal lVenID As Long, ByVal sVenNr As String, _
ByVal dVenDat As Date, ByVal lVenLZ As Long, _
ByVal dAnaKl As Date, ByVal dAnaGr As Date, _
ByVal lAnaKlLZ As Long, ByVal lAnaGrLZ As Long, _
ByVal bSetVenDat As Boolean, ByVal bSetKlDat As _
Boolean, ByVal bSetGrDat As Boolean) As Integer
Dim cn As OleDb.OleDbConnection
Dim sSql As String
Dim cmd As New OleDb.OleDbCommand
Dim lErgebnis As Integer
cn = BuildConnection()
cmd.Connection = cn
cmd.CommandTimeout = 2
cmd.Parameters.Add("@VenNr", OleDbType.VarChar)
cmd.Parameters.Add("@VenDat", OleDbType.DBDate)
cmd.Parameters.Add("@VenLZ", OleDbType.Integer)
cmd.Parameters.Add("@KlDat", OleDbType.DBDate)
cmd.Parameters.Add("@GrDat", OleDbType.DBDate)
cmd.Parameters.Add("@LzKlein", OleDbType.Integer)
cmd.Parameters.Add("@LzGross", OleDbType.Integer)
cmd.Parameters("@VenNr").Value = sVenNr
cmd.Parameters("@VenDat").Value = dVenDat
cmd.Parameters("@VenLZ").Value = lVenLZ
cmd.Parameters("@KlDat").Value = dAnaKl
cmd.Parameters("@GrDat").Value = dAnaGr
cmd.Parameters("@LzKlein").Value = lAnaKlLZ
cmd.Parameters("@LzGross").Value = lAnaGrLZ
sSql = "UPDATE ven SET " & _
"ven_nr=@VenNr, ven_datum=@VenDat, laufzeit=@VenLz, " & _
"ana_klein=@KlDat, ana_gross=@GrDat, laufzeit_klein=@LzKlein," & _
"laufzeit_gross=@LzGross " & _
"WHERE id=" & lVenID
'Wenn ein Datum nicht gesetzt werden soll im SQL String den Text
' abändern
If Not bSetVenDat Then sSql = sSql.Replace("=@VenDat", "=NULL")
If Not bSetKlDat Then sSql = sSql.Replace("=@KlDat", "=NULL")
If Not bSetGrDat Then sSql = sSql.Replace("=@GrDat", "=NULL")
'Das funktioniert aber ...
'sSql = "update ven set ven_datum=NULL WHERE id=21"
'Das funktioniert auch noch ...
'sSql = "update ven set ven_nr=@VenNr, ven_datum=NULL WHERE id=21"
'Das klappt nichtmehr ???
'sSql = "update ven set ven_nr=@VenNr, ven_datum=NULL, laufzeit=@VenLz" & _
"WHERE id=21"
cmd.CommandText = sSql
Try
lErgebnis = cmd.ExecuteNonQuery
Catch ex As Exception
lErgebnis = -1
End Try
Return lErgebnis
End Function Ich ersetze einfach den Parameter (z.B. =@VenDat) einfach durch =NULL. Sobald ich dies aber ausführe kommt eine Exception (Datentypen in Kriterienausdruck unverträglich.)
Nach einigen Versuchen weis ich das das ganze Funktioniert sobald im CommandText hinter dem =NULL kein Parameter mehr kommt (s. auskommentierte Bereich über cmd.commandtext = ssql)
Kann mir jemdand einen Tip geben wie ich das Problem lösen kann da ich unter Umständen noch einige andere Werte auf NULL setzen muss kann ich dieses eine Feld nicht einfach hintendran packen?
Ich hatte vorher versucht dem Parameter einfach DBNull zuzuordnen, das ging aber nicht, daher mein Versuch einfach den Commandtext zu ändern.
mfg
Sebastian |