我的程序运行正常,但现在唯一的问题是数据库更新的时候会出现一个警告框说:
查询表达式'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 & "")
非常感谢你!
答案 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 & "")
然后我在计时器中遇到问题,它不会启动。我重新输入了代码并修复了一些错误。现在我的程序运行得非常顺畅!谢谢大家的帮助,我非常感谢你的回答。