MySql查询语句语法错误

时间:2011-09-06 04:09:25

标签: mysql vb.net syntax

我收到以下代码的语法错误。
我正在尝试在mysql数据库中创建一个用户,并将他们的信息添加到一个datagrid控件中,所有这些都在一个按钮单击中使用两个语句;一个用于创建实际用户,另一个用于将用户及其附加信息添加到数据库中的表,然后刷新数据源,该数据源将在datagrid控件中显示新用户的信息。
如果有人知道我哪里出错了,请随意批评我的代码并让我知道;或者只是为我希望实现的目标提供更有效的替代方案。

对于那些必须知道的人,我在基于Windows 7的笔记本电脑上运行最新版本的MySql服务器,MySql Workbench和Visual Basic 2010 Express。我正在VB.net中编写这个程序。

谢谢!

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
    Dim sqluser As MySqlCommand = New MySqlCommand(
        "CREATE USER " & txtuser.Text & "@" & frmLogin.txtserver.Text & " IDENTIFIED BY '" & txtpass.Text & "';", con)
    Dim sqlinfo As MySqlCommand = New MySqlCommand(
        "INSERT INTO employee(Name ,Title) VALUES('" & txtname.Text & "','" & txttitle.Text & "';", con)
    Try
        con.Close()
        con.Open()

        sqluser.ExecuteNonQuery()
        MessageBox.Show("User Account successfully created!!")

        sqlinfo.ExecuteNonQuery()

        ' retrieving the administration table.
        DataAdapter1.SelectCommand = sqladmin
        DataAdapter1.Fill(ds, "stratos")
        DataGrid1.DataSource = ds
        DataGrid1.DataMember = "stratos"

        con.Close()
        MessageBox.Show("User Information successfully created!!")


    Catch myerror As MySqlException
        MessageBox.Show("Error Setting Up Account: " & myerror.Message)
    End Try

End Sub

1 个答案:

答案 0 :(得分:3)

你在插入语句的末尾缺少一个')'。

Dim sqlinfo As MySqlCommand = New MySqlCommand("INSERT INTO employee(Name ,Title ) VALUES('" & txtname.Text & "','" & txttitle.Text & "');"

我还想指出,如果文本中包含撇号,并且它对SQL Injection开放,则此代码将失败。请阅读。

我认为你可能还需要围绕用户名和主持人的撇号。

CREATE USER '" & txtuser.Text & "'@'" & frmLogin.txtserver.Text & "' IDENTIFIED BY '" & txtpass.Text & "';"

对于SQL注入,我建议您考虑重新编写代码以使用这样的预处理语句。用这个替换前两行代替。基本上,您在查询中放置了少量占位符,并让数据库驱动程序为您处理所有复杂的转义和引用。我不是百分百肯定这会起作用,但我认为它很接近。

Dim sqluser As MySqlCommand = New MySqlCommand("CREATE USER ?user@?host IDENTIFIED BY ?pass;", con)
sqluser.Parameters.Add("?user", txtuser.Text)
sqluser.Parameters.Add("?host", frmLogin.txtserver.Text)
sqluser.Parameters.Add("?pass", txtpass.Text)
sqluser.Prepare()

Dim sqlinfo As MySqlCommand = New MySqlCommand("INSERT INTO employee(Name ,Title) VALUES( ?user, ?title );", con)
sqlinfo.Parameters.Add("?user", txtuser.Text)
sqlinfo.Parameters.Add("?title", txttitle.Text)
sqlinfo.Prepare()

自从我做任何VB以来已经很久了,所以这主要基于这个页面。如果这不起作用,请尝试查看此处。 Documentation on Prepare