UPDATE语句中的错误消息:查询表达式中的语法错误(缺少运算符)

时间:2015-05-04 09:08:57

标签: vb.net

我不知道为什么当我点击更新按钮时,我收到错误 UPDATE语句中的语法错误

我不知道我的代码中出了什么问题

这是我的代码:

Public Class Form1
 Private Function vld(ByVal ParamArray ctl() As Object) As Boolean
    For i As Integer = 0 To UBound(ctl)
        If ctl(i).text = "" Then
            ErrorProvider1.SetError(ctl(i), ctl(i).tag)
            Return False
            Exit For
        End If
    Next
    Return True
End Function

Dim cn As New OleDbConnection
Dim cm As New OleDbCommand
Dim da As OleDbDataAdapter
Dim dt As New DataTable

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    cn.Close()
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    TxtExamtime.Format = DateTimePickerFormat.Custom
    TxtExamtime.CustomFormat = "hh:MM tt"
    cn.ConnectionString = "provider=microsoft.jet.oledb.4.0; Data Source=C:\psave\New folder\save.xls;Extended Properties=Excel 8.0;"
    cn.Open()
    FillDataGridView("select ID, Family Name, Given Name, Gender, DOB, Exam Date, Exam Time, Street Name, House Nr, PLZ, City from [edit$]")

End Sub

Private Sub FillDataGridView(ByVal Query As String)
    da = New OleDbDataAdapter(Query, cn)
    dt.Clear()
    da.Fill(dt)
    With DataGridView1
        .DataSource = dt
        .Columns(0).HeaderText = "ID"
        .Columns(1).HeaderText = "Family Name"
        .Columns(2).HeaderText = "Given Name"
        .Columns(3).HeaderText = "Gender"
        .Columns(4).HeaderText = "DOB"
        .Columns(5).HeaderText = "Exam Date"
        .Columns(6).HeaderText = "Exam Time"
        .Columns(7).HeaderText = "Street Name"
        .Columns(8).HeaderText = "House Nr"
        .Columns(9).HeaderText = "PLZ"
        .Columns(10).HeaderText = "City"
        .Columns(10).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    End With
End Sub

Private Sub BtnSearch_Click(sender As Object, e As EventArgs) Handles BtnSearch.Click
    Try
        FillDataGridView("select * from [edit$] where ID='" & TxtId.Text & "'")
        TxtFamilyname.Text = dt.Rows(0).Item(1)
        TxtGivenname.Text = dt.Rows(0).Item(2)
        TxtGender.Text = dt.Rows(0).Item(3)
        TxtDob.Text = dt.Rows(0).Item(4)
        TxtExamdate.Text = dt.Rows(0).Item(5)
        TxtExamtime.Text = dt.Rows(0).Item(6)
        TxtStreet.Text = dt.Rows(0).Item(7)
        TxtHouse.Text = dt.Rows(0).Item(8)
        TxtPlz.Text = dt.Rows(0).Item(9)
        TxtCity.Text = dt.Rows(0).Item(10)
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, Text)
    End Try
End Sub

Private Sub BtnSave_Click(sender As Object, e As EventArgs) Handles BtnSave.Click
    If vld(TxtId, TxtFamilyname, TxtGivenname, TxtGender, TxtDob, TxtExamdate, TxtExamtime, TxtStreet, TxtHouse, TxtPlz, TxtCity) = False Then
        Exit Sub
    Else

    End If

    Try
        With cm
            .Connection = cn
            .CommandText = "insert into [edit$]values('" & TxtId.Text & "','" & TxtFamilyname.Text & "','" & TxtGivenname.Text & "','" & TxtGender.Text & "','" & TxtDob.Text & "','" & TxtExamdate.Text & "','" & TxtExamtime.Text & "','" & TxtStreet.Text & "','" & TxtHouse.Text & "','" & TxtPlz.Text & "','" & TxtCity.Text & "' )"
            .ExecuteNonQuery()
        End With
        FillDataGridView("select * from [edit$]")
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, Text)
        Return
    End Try
    MsgBox("succefully Saved!", MsgBoxStyle.Information, Text)
End Sub

Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles Btnupdate.Click
    Try
        With cm
            .Connection = cn
            .CommandText = "Update [edit$] set [Family Name] = '" & TxtFamilyname.Text & "' where [ID] ='" & TxtId.Text & "' and [Given Name] = '" & TxtGivenname.Text & "' and [Gender] = '" & TxtGender.Text & "'and [DOB] = '" & TxtDob.Text & "'and [Exam Date]'" & TxtExamdate.Text & "'and [Exam Time] = '" & TxtExamtime.Text & "'and [Street Name] = '" & TxtStreet.Text & "'and [House Nr] = '" & TxtHouse.Text & "'and [PLZ] = '" & TxtPlz.Text & "'and [CITY] = '" & TxtCity.Text & "'"
            .ExecuteNonQuery()
        End With
        FillDataGridView("select * from [edit$]")
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, Text)
        Return
    End Try
    MsgBox("Succesfully updated!", MsgBoxStyle.Information, Text)
End Sub

Private Sub BtnClose_Click(sender As Object, e As EventArgs) Handles BtnClose.Click
    Close()
End Sub

Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles BtnClear.Click
    TxtId.Clear()
    TxtFamilyname.Clear()
    TxtGivenname.Clear()
    TxtStreet.Clear()
    TxtHouse.Clear()
    TxtPlz.Clear()
    TxtCity.Clear()
    'To see all the data in DataGridView
    FillDataGridView("select * from[edit$]")

End Sub

Private Sub BtnDelete_Click(sender As Object, e As EventArgs) Handles BtnDelete.Click
    Try
        With cm
            .Connection = cn
            .CommandText = "Delete from [edit$] where [Family Name] = '" & TxtFamilyname.Text & "' and [ID] ='" & TxtId.Text & "' and [Given Name] = '" & TxtGivenname.Text & "'and [Gender] = '" & TxtGender.Text & "'and [DOB] = '" & TxtDob.Text & "'and [Exam Date]'" & TxtExamdate.Text & "'and [Exam Time] = '" & TxtExamtime.Text & "'and [Street Name] = '" & TxtStreet.Text & "'and [House Nr] = '" & TxtHouse.Text & "'and [PLZ] = '" & TxtPlz.Text & "'and [CITY] = '" & TxtCity.Text & "'"
            .ExecuteNonQuery()
        End With
        MsgBox("Succesfully Deleted!", MsgBoxStyle.Information, Text)
        FillDataGridView("select * from [edit$]")
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Information, Text)

    End Try


End Sub


End Class

1 个答案:

答案 0 :(得分:0)

看看这是否对您有所帮助:

.CommandText = "Update [edit$] set [Family Name] = '" & TxtFamilyname.Text & "' where ID = '" & TxtId.Text & "' and [Given Name] = '" & TxtGivenname.Text & "' and Gender = '" & TxtGender.Text & "' and DOB = '" & TxtDob.Text & "' and [Exam Date] = '" & TxtExamdate.Text & "' and [Exam Time] = '" & TxtExamtime.Text & "' and [Street Name] = '" & TxtStreet.Text & "' and [House Nr] = '" & TxtHouse.Text & "' and PLZ = '" & TxtPlz.Text & "' and CITY = '" & TxtCity.Text & "'"

我所做的改变:

  • 在值和AND关键字之间添加了空格(例如,TxtExamdate.Text & "'and [Exam Time]在“和”之前需要一个空格)
  • 在字段名称和值之间添加了缺少的等号(例如,and [Exam Date]'" & TxtExamdate.Text应该更像and [Exam Date] = '" & TxtExamdate.Text
  • 摆脱无关的支架

如果您仍然遇到问题,请考虑从文本框中直接插入字符串(可能包含任何可打印字符(和不可打印的字符!))。如果这些字符串包含非法字符(例如,单个字符串)或双引号)它们将改变UPDATE语句的含义,并可能使语法无效。之前已经建议(在other question中)你应该使用parametrized queries。最后,你可能会得到一个数据类型不匹配错误,如果您的任何表列不是字符串(如“ID”),因为您将它们全部作为字符串发送(用双引号括起来)。

请注意,只需从一个帐户发布一次问题。