我收到以下代码的语法错误。
我正在尝试在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
答案 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