2017-02-07 20 views
-1

Я пытаюсь вставить несколько строк в базу данных, поэтому я создал простой тест, ниже которого работает;Ошибка с несколькими вкладками записи

strSQL = "INSERT INTO myDB (name) VALUES('" & Request.Form ("namex") & "'),('" & Request.Form ("namex2") & "')" 

Это создает две новые записи в моей базе данных, так что я теперь нужно сделать, это добавить больше fileds поэтому я адаптировать свой код, чтобы сделать это, но я получил что-то неправильно где-то, как я получаю следующая ошибка:

Microsoft OLE DB Provider for SQL Server error '80040e14'

There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.

это мой код, который я использую;

strSQL = "INSERT INTO myDB (name, sname) VALUES('" & Request.Form ("namex") & Request.Form ("snamex") & "'),('" & Request.Form ("namex2") & Request.Form ("snamex2") & "')" 

Кто-нибудь знает, как я могу заставить это работать, пожалуйста?

+1

Может быть больше пользы для вас - http://stackoverflow.com/ а/21944948/692942. Если вы еще не знаете, что вызовы базы данных кодирования - это плохая практика и полная дыра, подумайте о переходе на параметризованный запрос. – Lankymart

+1

Другой пример - http://stackoverflow.com/a/22729750/692942 – Lankymart

ответ

-2

Как указывает ошибка, созданный вами оператор имеет несоответствие между количеством столбцов и количеством значений. Мне кажется, что вы забыли поместить запятую между значениями для каждой записи в предложении VALUES.

strSQL = "INSERT INTO myDB (name, sname) VALUES('" & Request.Form ("namex") & Request.Form ("snamex") & "'),('" & Request.Form ("namex2") & Request.Form ("snamex2") & "')" 

генерирует

INSERT INTO myDB (name, sname) VALUES('namex-valuesnamex-value'),('namex2-valuesnamex2-value') 

но вы имеете в виду

INSERT INTO myDB (name, sname) VALUES('namex-value','snamex-value'),('namex2-value','snamex2-value') 

так что вы должны сказать

strSQL = "INSERT INTO myDB (name, sname) VALUES('" & Request.Form ("namex") & "','" & Request.Form ("snamex") & "'),('" & Request.Form ("namex2") & "','" & Request.Form ("snamex2") & "')" 
+0

спасибо Марк, всегда что-то простое, это прекрасно работает. – user6461738

+3

Возможно, было бы лучше не защищать практику, которая оставила бы пользователя подвергнутым SQL Injection? Это используется в веб-среде, поэтому теперь другое веб-приложение отправляется в дикую природу только для того, чтобы злоупотреблять SQLi, запускаемого сценарием kiddies. Надеюсь, что они не будут прикреплены к их базе данных, это не будет долго. – Lankymart

+1

Ах, потому что вам не нравятся методы OP, которые вы подавляете меня за ответ на его вопрос. Милый. Пропаганда: исправление ошибки, о которой он просил, не «защищает» методы, которые он использовал. Кроме того, ни вы, ни я не знаем контекст развертывания своего приложения. Это не зависит от вас или меня, чтобы сказать ему, как он должен написать свое приложение. Это не «вопрос и требование, чтобы все записывали приложения так, как вы их пишете», это сайт «вопрос и ** ответ **» –

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

  • Нет связанных вопросов^_^