我的命令中缺少什么操作符?

时间:2014-12-06 01:30:25

标签: database vb.net

我的程序运行正常,但现在唯一的问题是数据库更新的时候会出现一个警告框说:

查询表达式'ID ='中的语法错误(缺少运算符)。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim choice As String
    choice = MsgBox("Do you really want to delete?", MsgBoxStyle.YesNo)
    If choice = vbYes Then
        cnn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb")
        Dim str As String = ("DELETE FROM TableName WHERE ID= " & ComboBox1.Text & "")
        command = New OleDb.OleDbCommand(str, cnn)
        da = New OleDb.OleDbDataAdapter(command)
        cnn.Open()
        command.ExecuteNonQuery()
        Form1.Timer1.Enabled = True
        clearfields()
        Form1.Timer1.Enabled = False
        Me.Close()
    End If

    cnn.Close()

End Sub

它说错误位于:(ID是自动编号。)

Dim str As String = ("DELETE FROM TableName WHERE ID= " & ComboBox1.Text & "")

非常感谢你!

3 个答案:

答案 0 :(得分:0)

Dim str As String = ("DELETE FROM TableName WHERE ID= '" & ComboBox1.Text & "'")

您需要单引号作为值

答案 1 :(得分:0)

首先,您不要在括号中封装字符串赋值,并且必须用引号括住查询文本。

Dim str As String = "DELETE FROM TableName WHERE ID= '" & ComboBox1.Text & "'"

小心点。您的代码将为您打开SQL注入查询。 ComboBox1.Text中的任何内容都将被解析为SQL命令。如果ComboBox从用户那里收到文本,则必须清理输入。想象一下,如果用户设法将此文本放入文本框中,您将获得多少乐趣

' OR 1=1 OR 'a' =';

因此数据库将处理命令

DELETE FROM TableName WHERE ID= '' OR 1=1 OR 'a' =''

该命令将删除所有记录。

答案 2 :(得分:0)

我解决了自己的问题,我所做的是将ID更改为文本,因此命令中不会出现问题。

Dim str As String = ("DELETE FROM TableName WHERE ID= " & ComboBox1.Text & "")

然后我在计时器中遇到问题,它不会启动。我重新输入了代码并修复了一些错误。现在我的程序运行得非常顺畅!谢谢大家的帮助,我非常感谢你的回答。