2014-03-02 26 views
0

对于一些学校工作,我被授予源代码以更新访问数据库中的数据。但是,当试图使用它时,我几乎不知道正确的语法是什么。VB.net SQL语法

这里的源代码,功能更新:

Sub UpdateData(ByVal dataToUpdate As String, ByVal updateCriteria As String) 
    'Assemble SQL query to update the specified record(s) with the specified value(s) 
    Dim sql As String = "UPDATE " & DBtable & " SET " & dataToUpdate & " WHERE " _ 
     & updateCriteria 

    'Create an instance of data adapter (if not created already) 
    myDataAdapter = New OleDb.OleDbDataAdapter() 

    'Add command to update data (using data adaptor) based on SQL query above. 
    myDataAdapter.UpdateCommand = New OleDb.OleDbCommand(sql, myCon) 
    'Execute command to update data in the relevant database record(s) 
    myDataAdapter.UpdateCommand.ExecuteNonQuery() 

    MsgBox(sql) 
End Sub 

而这正是我试图用它来执行它,但我不能得到正确的语法:

UpdateData("first_name = '" & Firstnamebox.Text & "' AND last_name = '" _ 
    & Lastnamebox.Text & "' AND middle_name = '" & Middlenamebox.Text _ 
    & "' AND age = '" & Agebox.Text & "' AND AdditionalInfo = '" & AddInfoBox.Text _ 
    & "' AND User_level = '" & UserLevelBox.Text & "' AND username =' " _ 
    & Usernamebox.Text & "' AND [password] = '" & Passwordbox.Text & "'", 
    "ID = '" & id & "'") 

任何想法的我要去哪里错了?

感谢,

+2

您应该使用*预处理语句*修补查询这样在一起 –

+0

你_really_应该看到我的答案在这个岗位,而不是:http://stackoverflow.com/a/22130028/1842065 –

+0

我不能强调使用参数的重要性。它简化了分配值并防止注入攻击。例如,您在Age字段周围放置单引号,这可能是数字,并且会导致类型不匹配错误。 –

回答

0

替换SQL语句中的AND用逗号,

UpdateData("first_name = '" & Firstnamebox.Text & "', last_name = '" & Lastnamebox.Text & "', middle_name = '" & Middlenamebox.Text & "', age = " & Agebox.Text & ", AdditionalInfo = '" & AddInfoBox.Text & "', User_level = '" & UserLevelBox.Text & "', username =' " & Usernamebox.Text & "', [password] = '" & Passwordbox.Text & "'", "ID = '" & id & "'")

+0

那么,我将如何与语法做到这一点? – Naffel

+0

我更新了我的回答 –

+0

我得到一个不匹配错误,我认为这是因为Age是一个整数,而不是一个字符串;我将如何改变这一点? – Naffel

3

你不需要的数据适配器。一个连接和一个命令就是你所需要的。同时确保连接已打开。也许你会在代码中的其他位置执行此操作。

Dim command = New OleDb.OleDbCommand(sql, myCon) 
myCon.Open() 
command.ExecuteNonQuery() 

UPDATE命令是这样的:

UPDATE myTable 
SET col1 = value1, col2 = value2, col3 = value3, ... 
WHERE ... 

你用字符串连接在一起,拼接的SQL命令。更好地使用命令参数。

UPDATE myTable 
SET col1 = @1, col2 = @2, col3 = @3 
WHERE ID = @4 
Dim command = New OleDb.OleDbCommand(sql, myCon) 
command.Parameters.AddWithValue("@1", value1) 
command.Parameters.AddWithValue("@2", value2) 
command.Parameters.AddWithValue("@3", value3) 
command.Parameters.AddWithValue("@4", id) 
myCon.Open() 
command.ExecuteNonQuery() 

有这样做的几个优点:

  • 你不必关心数据的正确格式为SQL。特别是日期值可能会很难格式化。

  • 您对包含字符串分隔符的文本没有问题。

  • 它可以防止SQL注入攻击,例如黑客输入令人讨厌的SQL语句而不是用户名。

  • 它比较容易阅读。