Problem mit UPDATE Anweisung OleDBCommand

22/05/2008 - 18:32 von Ulrich Höltje | Report spam
Hallo NG

Ich habe ein Problem beim Update meiner Code Datenbank.

Aufruf: UpdateSnippet(4, "TestName", "Testbeschreibung", "VBNet",
"Random", "TestCode", "TestNotiz", "Tester")

Public Sub UpdateSnippet(ByVal ID as Integer, ByVal NewName As
String, ByVal Description As String, ByVal Language As String, ByVal
Keyword As String, ByVal Code As String, ByVal Notes As String, ByVal
ModifiedBy As String)

Dim SQL As String = "UPDATE Snippets SET Name = @Name,
Description = @Description, Language = @Language, Keyword = @Keyword,
Code = @Code, Notes = @Notes, Modified = @Modified, ModifiedBy =
@ModifiedBy WHERE ID = @ID;"

Dim cmd As New OleDbCommand
cmd.CommandText = SQL
cmd.Connection = con

cmd.Parameters.Add("@Name", OleDbType.VarWChar).Value = NewName

cmd.Parameters.Add("@Description", OleDbType.VarWChar).Value =
Description

'Fehler
cmd.Parameters.Add("@Language", OleDbType.VarWChar).Value =
Language

cmd.Parameters.Add("@Keyword", OleDbType.VarWChar).Value = Keyword

cmd.Parameters.Add("@Code", OleDbType.LongVarWChar).Value = Code

cmd.Parameters.Add("@Notes", OleDbType.LongVarWChar).Value = Notes

cmd.Parameters.Add("@Modified", OleDbType.Date).Value =
DateTime.Now

cmd.Parameters.Add("@ModifiedBy", OleDbType.VarWChar).Value =
ModifiedBy

cmd.Parameters.Add("@ID", OleDbType.Integer).Value = ID

Dim flag As Boolean = True

Try

con.Open()
cmd.ExecuteNonQuery()

Catch dbEx As OleDbException
MessageBox.Show(dbEx.Message, Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
flag = False
Catch ex As Exception
MessageBox.Show(ex.Message, Application.ProductName,
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
flag = False
Finally

cmd.Parameters.Clear()
cmd.Dispose() : cmd = Nothing
con.Close()

End Try

If flag Then
MessageBox.Show("Snippet wurde erfolgreich geàndert",
Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("Snippet konnte nicht geàndert werden!",
Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If

End Sub

Eine Insert Anweisung mit den gleichen Parametern funktioniert einwandfrei.

Beim Update aber bekomme ich die Fehlermeldung: Fehler in der Update
Anweisung

Habe dann versucht den Fehler einzugrenzen:
Also Update nur mit @Name, dann mit @Name + @Description usw.
SQL Anweisung natürlich angepast.

Und siehe da, wenn ich @Language weglasse funktioniert es.

Aber warum nur?

Arbeite mit Visual Basic 2008 Express, Netframework 2.0

Gruß aus Hameln an der Weser, Ulrich
 

Lesen sie die antworten

#1 Peter Fleischer
22/05/2008 - 19:24 | Warnen spam
"Ulrich Höltje" schrieb im Newsbeitrag
news:g1475o$9p$02$
...
Und siehe da, wenn ich @Language weglasse funktioniert es.

Aber warum nur?



Hi Ulrich,
es gibt eine Reihe reserviertes Schlüsselwort, die in SQL-Anweisungen nicht
als Bezeichner genutzt werden sollten. "Position" ist eines der gemeinsten
solcher Schlüsselworte:-( Abhilfe schafft entweder die Nutzung nicht
reservierter Schlüsselworte, indem beispielsweise alle Bezeichner gleich mit
Pràfix angelegt werden:

UPDATE SNIppets SET SNILanguage = @Language ...

Oder der Einschluss der Bezeichner in Scopes:

UPDATE [Snippets[ SET [Name] = @Name,
[Description] = @Description, [Language] = @Language,
[Keyword] = @Keyword, [Code] = @Code, [Notes] = @Notes,
[Modified] = @Modified, [ModifiedBy] = @ModifiedBy
WHERE [ID] = @ID


Viele Grüsse
Peter

Ähnliche fragen