1

次のコードで vb アプリケーションを実行します。「INSERT INTO」SQL クエリでエラーが発生し続けます。何が間違っているのか誰にもわかりますか? これはエラーです - INSERT INTO ステートメントの構文エラーです。

 connetionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Dave\Documents\joblist.mdb;"

            connection = New OleDb.OleDbConnection(connetionString)


            Sql = "INSERT INTO jobList (StaffID, staffName, staffLastName, note, fault, section, techID, jobcomplete) VALUES ('" & staffid & "','" & staffFN & "','" & staffLN & "','" & staffNotes & "','" & staffFault & "', '" & staffSection & "', '" & techId & "','" & ava & "')"
            connection.Open()
            oledbAdapter.UpdateCommand = connection.CreateCommand
            oledbAdapter.UpdateCommand.CommandText = Sql
            oledbAdapter.UpdateCommand.ExecuteNonQuery()
            connection.Close()
            Me.JobListTableAdapter.Fill(Me.JoblistDataSet2.jobList)
4

2 に答える 2

0

NoteSectionJetSQLの予約語です。 角かっこでカプセル化する必要があります。

Sql = "INSERT INTO jobList (StaffID, staffName, staffLastName, [note], fault, " +
      "[section], techID, jobcomplete) VALUES (......)"

これが構文エラーの原因ですが、.....
それ以外に、ここには多くの問題があります。

  • Tim Schmeiterが指摘しているように、挿入コマンドの代わりに更新コマンドを使用します。
  • ユーザーからの入力テキストを連結してSQL文字列を形成します。これにより、SQLインジェクション攻撃が発生し、テキストの正しい解析で問題が発生します(アポストロフィ、無効な日付、無効な数値など)。
  • staffIDtechIDデータベース内の数値フィールドのようですが、それらの値を文字列のように一重引用符で囲みます。それらが数値の場合、そこで別のエラーが発生する可能性があります。
于 2012-10-19T11:34:39.220 に答える
0

挿入しているのでInsertCommand、プロパティの代わりにを使用する必要があると思います。UpdateCommand

oledbAdapter.InsertCommand.CommandText = "INSERT INTO jobList (StaffID, staffName, ....

ParametersSQL-Injection に対してオープンであり、代わりに使用する必要があることに注意してください。また、Usingステートメントを使用して、エラーが発生した場合でも接続が確実に閉じられるようにする必要があります。

于 2012-10-19T11:30:09.517 に答える