2011-09-06 127 views
-1

我收到以下代码的语法错误。
我想在mysql数据库中创建一个用户,并将他们的信息添加到一个datagrid控件中,使用两个语句单击一个按钮;一个用于创建实际用户,另一个用于将用户及其附加信息添加到数据库的表中,然后刷新将在datagrid控件中显示新用户信息的数据源。
如果有人知道我出错的地方,请随时批评我的代码并让我知道;或者简单地提供更有效的替代方案来达到我希望达到的效果。MySql查询语句语法错误

对于那些你必须知道的,我在基于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 
+0

哪一行在编译器或执行过程中用_synatx error_标记? – Marco

回答

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注入,我建议您考虑重新编写代码以使用这样的预处理语句。取而代之的是前两行。基本上,您在查询中放入了小占位符,并让数据库驱动程序处理所有复杂的转义和引用。我不是100%肯定这会起作用,但我认为它很接近。

Dim sqluser As MySqlCommand = New MySqlCommand("CREATE USER [email protected]?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

+0

你建议修正我遇到的错误,但它仍然说“sqluser”行附近出现语法错误...并请建议一个反注入解决方案!我不知道这将是如此简单,成为SQL注入的受害者!我以为你需要某种软件来做到这一点...... – daniel11