2017-04-26 93 views
0

我已經在Microsoft Access中測試了這條SQL語句,它完美地工作,但由於某種原因,它在我的代碼中不起作用。我已經檢查了很多次,並且我還沒有弄清楚語法錯誤(儘管它在MS Access中工作)。在INSERT INTO語句中的VB.net語法錯誤(雖然在語句中沒有語法錯誤)

這裏的錯誤消息:

類型 'System.Data.OleDb.OleDbException' 未處理的異常 出現在system.data.dll

附加信息:在INSERT INTO語句的語法錯誤。

這裏是我的代碼:現在

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    'Now, when the Register button is clicked, 
    'We check, if the user type is User, we create a normal User in the database. 
    'Otherwise, we create a Wroker. 

    Dim fname, lname, nationality, password As String 
    Dim age, yearExpr, phone, saloonID, type As Integer 

    fname = fNameBox.Text 
    lname = LNameBox.Text 
    age = Convert.ToInt32(ageBox.Text) 
    phone = Convert.ToInt32(phoneBox.Text) 
    password = passwordBox.Text 


    If (userTypeCB.Text.Equals("User")) Then 
     type = 1 
     salSql = "" 
     salCnc.Open() 
     salSql = "INSERT INTO User ([Fname], [Lname], [Age], [Phone#], [Type], [Password]) 
       VALUES (" & "'" & fname & "'" & "," & "'" & lname & "'" & "," & age & "," & phone & "," & type & "," & "'" & password & "'" & ")" 


     salCommand = New OleDb.OleDbCommand(salSql, salCnc) 
     salCommand.ExecuteNonQuery() 

     salCnc.Close() 



    ElseIf (userTypeCB.Text.Equals("Worker")) Then 
     yearExpr = exprBox.Text 
     saloonID = saloonBox.Text 
     nationality = NationBox.Text 

    End If 
End Sub 

,編譯器指向salCommand.ExecuteNonQuery()的誤差源。任何想法是什麼問題?

+2

錯誤說明您在插入語句中有語法錯誤。你也應該使用參數化命令來避免SQL注入,這也可能是這個合成錯誤的原因 – Nkosi

+0

什麼數據類型是'Age','Phone#'和'Type'?我強烈建議使用命令參數來避免SQL注入攻擊漏洞。 – Filburt

+0

...或[媽媽會打你的應用](https://xkcd.com/327/) – Filburt

回答

4

信用到@LarsTech

用戶是一個關鍵字。你必須把它放在括號內。即:INSERT INTO [User]...

另外,使用參數化命令避免SQL注入,這也可能是此語法錯誤的原因。

'''code removed for brevity 

salSql = "INSERT INTO [User] ([Fname],[Lname],[Age],[Phone#],[Type],[Password]) VALUES (?,?,?,?,?,?)" 


salCommand = New OleDb.OleDbCommand(salSql, salCnc) 

salCommand.Parameters.Add("@fname", fname) 
salCommand.Parameters.Add("@lname", lname) 
salCommand.Parameters.Add("@age", age) 
salCommand.Parameters.Add("@phone", phone) 
salCommand.Parameters.Add("@type", type) 
salCommand.Parameters.Add("@password", password) 

salCommand.ExecuteNonQuery() 

'''code removed for brevity 
+0

我剛剛測試過你的解決方案,它不起作用。它顯示完全相同的錯誤並指向完全相同的行,即'salCommand.ExecuteNonQuery()' –

+2

@AbbasAleid'INSERT INTO [User] ...' – LarsTech

+0

@AbbasAleid檢查更新後的答案。 – Nkosi

相關問題