2014-02-06 168 views
-1

我有這個代碼,但是當我嘗試執行它時,我總是收到一個消息框,說Syntax error in INSERT statement我不知道最新的錯誤。有人能幫我嗎?我是一個新手在數據庫中插入數據

Private Sub Button1_Click(ByVal sender As System.Object, 
      ByVal e As System.EventArgs) Handles Button1.Click 

     If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox3.Text = "" Then 
      MsgBox("some fields are empty ") 
      Exit Sub 
     ElseIf TextBox2.Text <> TextBox3.Text Then 
      MsgBox("password do not match ") 
      Exit Sub 
     Else 
      ans = MsgBox(" are you want to ADD this user? ", MsgBoxStyle.YesNo, 
        "confirm ") 
      If ans = MsgBoxResult.Yes Then 
       Try 
        Dim SqlQuery = "INSERT INTO login (user,pass) VALUES _ 
         ('" & TextBox1.Text & "','" & TextBox2.Text & "')" 
        Dim sqlcommand As New OleDbCommand 
        With sqlcommand 
         .CommandText = SqlQuery 
         .Connection = conn 
         .ExecuteNonQuery() 
        End With 
        MsgBox("User Succesfully added", MsgBoxStyle.Information) 
        TextBox1.Text = "" 
        TextBox2.Text = "" 
        TextBox3.Text = "" 

       Catch ex As Exception 
        MsgBox(ex.Message) 
       End Try 
      Else 
       Exit Sub 
      End If 

     End If 

    End Sub 
+1

連接對象定義在哪裏? –

+0

你是什麼意思?即時通訊一個newbee .. – user3242798

+0

你在哪裏連接對象被定義,並且它是連接打開? –

回答

2

除了你礙於面子(查找參數化查詢)的其他問題,你已經正確連接在一起的字符串。

變化

Dim SqlQuery = "INSERT INTO login (user,pass) VALUES _ 
        ('" & TextBox1.Text & "','" & TextBox2.Text & "')" 

要:

Dim SqlQuery = "INSERT INTO login (user,pass) VALUES " & _ 
        "('" & TextBox1.Text & "','" & TextBox2.Text & "')" 
+0

先生即時通訊仍然收到錯誤 – user3242798

+0

相同的語法錯誤消息? – Tom

+0

是的先生..相同的語法錯誤消息 – user3242798

5

假設您正在使用MS-Access時,Word用戶是保留關鍵字,則需要將其封裝在方括號

但讓我們嘗試使用參數化查詢來解決sql注入和密碼或用戶名中的單引號問題

Dim SqlQuery = "INSERT INTO login ([user],pass) VALUES (?,?)" 
Dim sqlcommand As New OleDbCommand 
With sqlcommand 
    .CommandText = SqlQuery 
    .Connection = conn 
    .Parameters.AddWithValue("@p1",TextBox1.Text) 
    .Parameters.AddWithValue("@p2",TextBox2.Text) 
    .ExecuteNonQuery() 
End With 

The?佔位符將被您的命令的Parameters集合中定義的參數的實際值替換。當使用OleDb時,這些參數不會被它們的名字(因此是匿名佔位符)所識別,而是被它們的位置所識別。這意味着集合中的第一個參數會替換第一個佔位符,依此類推....順便說一句,框架知道如何準備propertyly的字符串參數(或日期或小數)的值,並將適當的引號或小數點分隔符值

+0

先生我仍然收到錯誤 – user3242798

+0

仍語法錯誤?這很奇怪。你確定列名和表名嗎? – Steve

+0

我肯定肯定先生 – user3242798