2014-02-06 64 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