2016-12-21 3 views
-4

У меня есть программа в VB.NET, которая будет вводить данные из текстовых полей в базу данных Access. Вот пример изображения:Ошибка синтаксиса VB 2010 (INSERT INTO)

enter image description here

Это код, я использую, и это дает мне ошибку:

m = TextBox1.Text 
b = "'" + TextBox2.Text + "'" 
x = "'" + TextBox3.Text + "'" 
d = TextBox4.Text 
n = "'" + TextBox5.Text + "'" 
Dim s2 As String 
s2 = "insert into users1 (num , name1 , pass , add , phone) " & " values (" + m + " , " + n + " , " + b + " , " + x + " , " + d + ") " 
Dim cmd2 As New OleDbCommand(s2, con) 
cmd2.ExecuteNonQuery() 

ответ

1

Причина ваш SQL терпит неудачу в том, что «добавить» является зарезервированным словом , т. е. вы не можете использовать его, не помещая его в квадратные скобки - [add]. Как указано выше, вы должны параметризировать запрос, поэтому один из них будет работать ...

Using oleCmd As New OleDbCommand("Insert Into users1 (num,name1,pass,[add],phone) values (@num,@name1,@pass,@add,@phone)", con) 
    oleCmd.Parameters.Add("@num", OleDbType.Integer).Value = Textbox1.Text 
    oleCmd.Parameters.Add("@name1", OleDbType.VarChar).Value = Textbox2.Text 
    oleCmd.Parameters.Add("@pass", OleDbType.VarChar).Value = Textbox3.Text 
    oleCmd.Parameters.Add("@address", OleDbType.VarChar).Value = Textbox4.Text 
    oleCmd.Parameters.Add("@phone", OleDbType.Integer).Value = Textbox5.Text 
    oleCmd.ExecuteNonQuery() 
End Using 

Using oleCmd As New OleDbCommand("Insert Into users1 (num,name1,pass,[add],phone) Values (?,?,?,?,?)", con) 
    oleCmd.Parameters.AddWithValue("?", Textbox1.Text) 
    oleCmd.Parameters.AddWithValue("?", Textbox2.Text) 
    oleCmd.Parameters.AddWithValue("?", Textbox3.Text) 
    oleCmd.Parameters.AddWithValue("?", Textbox4.Text) 
    oleCmd.Parameters.AddWithValue("?", Textbox5.Text) 
    oleCmd.ExecuteNonQuery() 
End Using 

Примечания, это будет ошибкой, если типы данных не совпадают, что вы пытаетесь вставить, так что если вы попытаетесь вставить текст в номере или в телефоне произойдет сбой. Вам нужно будет подтвердить свой ввод и предпочтительно преобразовать их, а не использовать текстовое поле Текст.