我目前正在制作一个简单的项目,显示一个人的列表,并基本上表明他们是在办公室,还是在外面.人们还可以编辑列表以指示他们是在办公室还是在办公室,并更新一条消息,说明他们什么时候回来.
我的问题是,当我更新列表时,我收到一条错误,指出我的Update语句中存在语法错误,但我找不到它.我正在使用visual studio 2012,在VB.NET中开发,并使用通过OleDB连接访问的访问数据库.
这是有问题的VB代码
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If InOutComboBox.SelectedItem = "IN" Then
MessageTextBox.Text = ""
End If
con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\People.mdb")
con.Open()
If ListView1.SelectedIndices.Count > 0 Then
Dim comStr As String = "UPDATE tblStaffNames SET OutIn = '" & InOutComboBox.SelectedItem & "', Note = '" & MessageTextBox.Text & "' WHERE recid = " & ListView1.SelectedItems(0).SubItems(0).Text
cmd = New OleDbCommand(comStr, con)
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message & " - " & ex.Source)
End Try
End If
ListView1.Clear()
LoadList()
End Sub
Run Code Online (Sandbox Code Playgroud)
这是我运行代码时comStr的示例值
UPDATE tblStaffNames SET OutIn = 'OUT', Note = 'on vacation' WHERE recid = 26
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.谢谢.
NOTE是Jet-MsAccess的保留关键字.
在将命令提交到数据库引擎之前,需要使用方括号进行封装
您的查询中还有另一个大问题.无法信任用户输入使用字符串连接直接发送到数据库.你应该使用参数化查询(Sql注入)
Using con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\People.mdb")
con.Open()
If ListView1.SelectedIndices.Count > 0 Then
Dim comStr As String = "UPDATE tblStaffNames SET OutIn = ?, [Note] = ?" & _
" WHERE recid = ?"
cmd = New OleDbCommand(comStr, con)
cmd.Parameters.AddWithValue("@p1", InOutComboBox.SelectedItem)
cmd.Parameters.AddWithValue("@p2", MessageTextBox.Text)
cmd.Parameters.AddWithValue("@p3", ListView1.SelectedItems(0).SubItems(0).Text)
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message & " - " & ex.Source)
End Try
End If
End Using
Run Code Online (Sandbox Code Playgroud)
注意参数顺序,在OleDb中是位置的,所以每个参数都应该按照?占位符预期的确切顺序出现在Parameters集合中.
另外,正如您所看到的,我还添加了Using语句,以确保在完成连接对象操作后正确关闭和处理连接对象.
| 归档时间: |
|
| 查看次数: |
5722 次 |
| 最近记录: |