1

VB.Net のフロント エンドとAccess 2003バック エンドを使用して、自分用の簡単な発券ソフトウェアを作成しようとしています。新しい行を追加できるようにしていますが、更新行をコーディングしようとすると、問題が見つからないbuttonというエラーが表示されます。Microsoft JET Database Engine - Syntax error in UPDATE statement.

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
    Dim da As New OleDbDataAdapter
    Dim dt As New DataTable
    Dim ConnectString As String = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\aaron-pister\Desktop\New Role Notes\Issue Tracker Express\Issue Tracker Express\Issue Tracker.mdb")
    Dim con As New OleDbConnection(ConnectString)
    con.Open()
    Dim Green42 As String = "UPDATE Issues Basic Details SET [Company Name] = '" & txtClientName.Text & "', [Status] = '" & cbStatus.Text & "', [Company Contact] = '" & txtClientContact.Text & "', [Description] = '" & txtDesc.Text & "', [Notes] = '" & txtRes.Text & "' WHERE [TicketNum] = '" & txtTicket.Text & "'"
    'con.Open()
    If txtClientName.Text <> "" Then
        Try
            'MyCom.CommandText = "UPDATE [Issues Basic Details] SET Company Name = '" & txtClientName.Text & "', Status = '" & cbStatus.Text & "', Company Contact = '" & txtClientContact.Text & "', Description = '" & txtDesc.Text & "', Notes = '" & txtRes.Text & "' WHERE TicketNum = '" & txtTicket.Text & "')"
            da = New OleDbDataAdapter(Green42.ToString, ConnectString)
            da.Fill(dt)
            da.Update(EsInfo1, "Issues Basic Details")
            MsgBox("Your record has been updated successfully.", MsgBoxStyle.DefaultButton1, "New Ticket Submitted")
        Catch ex As Exception
            MsgBox(ex.Source & "-" & ex.Message)
            con.Close()
            Exit Sub
        End Try
    Else
        MsgBox("You must have an entry in the Client Name, Client Contact and Status fields. It is recommended to also have a value in the Description field.", MsgBoxStyle.OkOnly, "Issue Tracker Express")
        btnNewIncident_Click(sender, e)
        Exit Sub
    End If
End Sub
4

3 に答える 3

4

テーブル名も括弧で囲む必要があります。

Dim Green42 As String = "UPDATE [Issues Basic Details] SET [Company Name]..."

また、値を文字列に入れる代わりにパラメーターを使用します。SQL インジェクションを回避します。

于 2013-01-08T19:54:20.510 に答える
0

これ:

UPDATE Issues Basic Details SET ...

有効な SQL ではありません。テーブル名を修飾することでそれを助ける必要があります:

UPDATE [Issues Basic Details] SET ...

その他のいくつかの提案:

  1. 準備済みステートメントを使用する (SQL インジェクション攻撃を避けるために SQL をパラメーター化する)
  2. クリック イベント ハンドラーでこのタイプの動作を定義しないでください。この作業を行うヘルパー クラスを用意して、再利用できるようにし、UI に直接結合しないようにします。
  3. Usingステートメントを使用します。あなたのOleDbConnectionクラスは を実装してIDisposableいます。この接続を適切に破棄していません。
于 2013-01-08T19:54:51.220 に答える
0

現時点ではコードを読むのは難しいですが、多くの問題を引き起こす可能性のある「アドホック」クエリを実行しようとしているように見えます。

問題の診断にも役立つように、最初にステートメントをパラメーター化されたクエリに変更することをお勧めします。

于 2013-01-08T19:55:14.643 に答える