Syntaxfehler in "INSERT INTO" aber wo???

28/01/2010 - 08:03 von Christian Krüger | Report spam
Moin
ich denke das mein Problem hier besser hinpasst als in VB.net!
Ich habe ein kleines Frm das nur zum Anlegen eines DS dienen sollte. Da mir
die
DB - Programmierung nicht liegt Buch gekauft und los, aber nach meiner
Anpassung
der Syntax immer das selbe


Syntaxfehler in der INSERT INTO Anweisung

Nur ich finde den nicht

Anbei der Gesamte Quelltex des Frm:



Imports System.Data.OleDb
-
Public Class sp_new
Private conn As OleDbConnection
-
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=data.mdb; ")
MyBase.OnLoad(e)
End Sub
-
Private Sub execNQuery(ByVal cmdText As String)
Dim cmd As New OleDbCommand(cmdText, conn)
Try
conn.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
conn.Close()
End Sub
-
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim sql As String
sql = "INSERT INTO tab_Bowler(Feld1, Feld2, Feld3, Feld4, Feld5,
Feld6, Feld7, Feld8)" & _
" VALUES ('" & TextBox1.Text & " ', '" & TextBox2.Text & "', '" & _
TextBox3.Text & " ', '" & TextBox4.Text & "', '" & _
TextBox5.Text & " ', '" & TextBox6.Text & "', '" & _
TextBox7.Text & " ', '" & TextBox8.Text & "')"
execNQuery(sql)
End Sub
End Class


Danke für die Hilfe

Ch. Krüger
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
28/01/2010 - 08:44 | Warnen spam
Hallo Christian,

"Christian Krüger" schrieb:

Syntaxfehler in der INSERT INTO Anweisung

Nur ich finde den nicht



kannst Du mal bitte den Inhalt der Variablen "sql" nach der Zuweisung
des Strings "INSERT INTO ..." hier posten? Am besten einen Breakpoint
auf "execNQuery(sql)" setzen und dann den kompletten String hier posten.

Alle 8 Spalten sind vom Typ Text? Die heißen auch genau so wie von dir
geschrieben? Falls nicht und falls Du bspw. sowas wie Name, Datum, Passwort,
... als Spaltenname verwendet hast, setz die Spaltennamen im Statement mal
in [...]

sql = "INSERT INTO tab_Bowler(Feld1, Feld2, Feld3, Feld4, Feld5,
Feld6, Feld7, Feld8)" & _
" VALUES ('" & TextBox1.Text & " ', '" & TextBox2.Text & "', '" & _
TextBox3.Text & " ', '" & TextBox4.Text & "', '" & _
TextBox5.Text & " ', '" & TextBox6.Text & "', '" & _
TextBox7.Text & " ', '" & TextBox8.Text & "')"



Grundsàtzlich noch der Hinweis, dass man das so nicht machen sollte.



sql = "INSERT INTO ... VALUES ( @Feld1, @Feld2, ... )

Dim Command As New OleDbCommand( sql, <Connection> )
Command.Parameters.AddWithValue( "@Feld1", TextBox1.Text )
Command.Parameters.AddWithValue( "@Feld2", TextBox2.Text )
...

Command.ExecuteNonQuery()



Wichtig bei den Platzhaltern ist bei OleDb die Reihenfolge. Die Namen "@Feld1",
... sind nur zur Übersichtlichkeit und haben keine Bedeutung. In der Doku steht
dazu, dass man "?" als Platzhalter verwenden soll, ein Name geht aber auch, hat
aber, wie schon gesagt, keinerlei Auswirkung. Wenn Du es bspw. so schreibst:



Command.Parameters.AddWithValue( "@Feld2", TextBox2.Text )
Command.Parameters.AddWithValue( "@Feld1", TextBox1.Text )



wird der erste Parameter dann mit dem Wert aus TextBox2.Text belegt. Wenn Du
SQL Server verwendest, sieht das anders aus, da sind die Namen wichtig :)

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen