2015-10-09 5 views
-1
With cmd 
    .Connection = con 
    .CommandTimeout = 0 
    .CommandText = "INSERT INTO tableContacts (NameUser, Address, City, Phone, Fax, Note, Email) VALUES (@NameUser, @Address, @City, @Phone, @Fax, @Note, @Email)" 
    With .Parameters 
     .AddWithValue("@NameUser", txtName.Text) 
     .AddWithValue("@Address", txtAddress.Text) 
     .AddWithValue("@City", txtCity.Text) 
     .AddWithValue("@Phone", txtPhone.Text) 
     .AddWithValue("@Fax", txtFax) 
     .AddWithValue("@Note", txtNote.Text) 
     .AddWithValue("@Email", txtTo.Text) 

    End With 

    Try 
     cmd.ExecuteNonQuery() 
    Catch ex As Exception 

    End Try 
    .Dispose() 
End With 

Не можете найти, где проблема.Ошибка синтаксиса в запросе

Все отладчик говорит,:

{ "Ошибка синтаксиса в заявлении INSERT INTO."}

+0

Его не о @email и это база данных –

+0

доступа к тем, кто голосует, чтобы закрыть как «опечатку вопрос» и upvote соответствующих комментариев: Если бы это было о пропавшем/недопустимом параметре, то ошибка будет отличаться , – GSerg

+2

'Примечание' является зарезервированным словом. Вы должны заключить его в квадратные скобки '[Примечание]'. https://support.microsoft.com/en-us/kb/321266 –

ответ

0

OleDbCommands не поддерживают именованные параметры. Вам нужно использовать вопросительные знаки в своем SQL-заявлении, а затем просто добавить параметры в правильном порядке.

.CommandText = "INSERT INTO tableContacts (NameUser, Address, City, Phone, Fax, Note, Email) VALUES (?, ?, ?, ?, ?, ?, ?)" 
With .Parameters 
    .AddWithValue("?", txtName.Text) 
    .AddWithValue("?", txtAddress.Text) 
    .AddWithValue("?", txtCity.Text) 
    .AddWithValue("?", txtPhone.Text) 
    .AddWithValue("?", txtFax) 
    .AddWithValue("?", txtNote.Text) 
    .AddWithValue("?", txtTo.Text) 
End With 
+1

Хотя вы правы, что OleDb не поддерживает именованные параметры, код OP [будет работать в любом случае] (http://stackoverflow.com/q/1476770/11683). Это не является источником проблемы. – GSerg

+0

Вы получаете синтаксическую ошибку, когда ваш оператор использует @ в качестве префикса параметра в инструкции SQL. Использование зарезервированных слов также сделает это. –

+0

Это верно только в том случае, если вы действительно вручную отправляете '@' в текст запроса. Когда у вас есть объект команды, который был создан с помощью '@', '@' не обязательно достигнет базы данных. – GSerg

Смежные вопросы