VB Access DB Update语句

时间:2015-07-24 17:24:12

标签: sql database vb.net

我是这个论坛的新手,请你帮我把这段代码搞定,当我执行它时,它什么都不做,不更新数据库。如果我删除方括号,则会出现错误:" UPDATE语句中的SYNTAX ERROR" 任何帮助表示赞赏!

Dim connection As OleDbConnection
connection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=UserDB.accdb;Jet OLEDB:Database;")
connection.Open()

Dim pass As String
pass = txtconfirm.Text
Dim user As String
user = LoginForm.UsernameTextBox.Text

Dim query As String = "UPDATE [Users] SET [Password]= '" & pass & "' WHERE [Username]= '" & user & "';"

Dim command As New OleDbCommand(query, connection)
command.ExecuteNonQuery()
connection.Close()

2 个答案:

答案 0 :(得分:0)

根据您的实际连接字符串,将要更新的数据库是应用程序启动目录中的数据库。这意味着如果您使用WinForms应用程序,此文件夹是\ BIN \ DEBUG或x86变体。如果没有错误,那么您可以获取ExecuteNonQuery调用的返回值以验证记录是否已更新

 Dim rowsUpdated = command.ExecuteNonQuery()
 MessageBox.Show("Record updated count = " & rowsUpdated)

如果此值不为零,则表示您的数据库已更新,并且您正在查找错误数据库中的更改。检查BIN \ DEBUG文件夹中的那个。

在任何情况下,您的代码都存在很大问题。如果变量userpass包含单引号,则代码将再次崩溃,因为字符串连接将形成无效的SQL。像往常一样,唯一的解决方法是使用参数化查询

Dim pass = txtconfirm.Text
Dim user = LoginForm.UsernameTextBox.Text
Dim query As String = "UPDATE [Users] SET [Password]= @p1 WHERE [Username]= @p2"
Using connection = New OleDbConnection("...........")
Using command As New OleDbCommand(query, connection)
    connection.Open()
    command.Parameters.Add("@p1", OleDbType.VarWChar).Value = pass
    command.Parameters.Add("@p2", OleDbType.VarWChar).Value = user
    command.ExecuteNonQuery()
End Using
End Using

参数化方法有许多优点。您的查询文本更具可读性,您的代码与数据库引擎所期望的值之间不存在误解。虽然使用MS-Access并不容易,但Sql Injection

没有问题

答案 1 :(得分:0)

我认为史蒂夫提出了一个更好的方法来编码这个...... 让我再说几件事:
你不能取出这些括号的原因是你的一些列名是保留字;仅供参考 因为你报告"它什么都不做......"当你执行时,听起来你有一个有效的连接和sql语法,在这种情况下我的下一步是在调试模式下复制sql命令文本,将其更改为选择并在数据库中运行它。你应该得到一个结果。如果没有,您的标准或字段内容不是您认为的那样......
只需将Update table SET field-value ...更改为SELECT * FROM table,然后保留WHERE子句。