2011-09-06 128 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