получение ошибки типа при вставке параметризованного запроса с помощью vbscript в классическом asp

edit по-прежнему возникает ошибка несоответствия типов, но обновленный код с помощью комментариев — обновленный код показан ниже

Я новичок в ASP и VBScript. Я пытаюсь вставить почтовые данные в базу данных SQL, однако я хочу убедиться, что запрос стерилизуется, поэтому я пытаюсь использовать параметризованный запрос. Когда я выполняю запрос, я получаю эту ошибку.

Microsoft VBScript runtime error '800a000d'

Type mismatch

мой код выглядит так

Set conn = Server.CreateObject("ADODB.Connection")
conn.Mode = 3
conn.open "Provider=SQLOLEDB;Data Source=xxx.xxx.xxx.xxx,xxxx;
database=db_example;uid=user;pwd=password;"

Dim oCmd 
set oCmd= Server.CreateObject("ADODB.Command") 

Dim sSQL 
sSQL = "INSERT INTO tbl_Application (Expenses, Name, Why) VALUES (?, ?, ?);"
oCmd.CommandText = sSQL
oCmd.ActiveConnection= conn

Dim uPar 
uPar = oCmd.CreateParameter("Expenses",200,1,255,session("Expenses")) 
oCmd.Parameters.Append(uPar)

Dim vPar 
vPar = oCmd.CreateParameter("Name",200,1,255,session("Name")) 
oCmd.Parameters.Append(vPar)

Dim wPar 
wPar = oCmd.CreateParameter("Why",200,1,255,session("Why")) 
oCmd.Parameters.Append(wPar)

Dim oRS 
oRS = oCmd.Execute()

Я попытался ввести данные как varchar и char. Пожалуйста, дайте мне знать, если у вас есть решение моей проблемы. Кроме того, я собираюсь вставить на сайт более трех фрагментов данных - есть ли лучший способ, чем пройтись и задать параметр вручную для каждого столбца?


person Vincent Gustav    schedule 11.07.2013    source источник
comment
вы должны использовать Dim для объявления переменных с помощью vbscript. msdn.microsoft.com/en-us/ библиотека/t7zd6etz%28v=vs.84%29.aspx. var используется в jscript   -  person Flakes    schedule 11.07.2013
comment
спасибо, переключился на тусклый, однако не позволил мне определить Dim при объявлении. Ака, я должен написать Dim xyz, а затем во второй строке xyz = "something"   -  person Vincent Gustav    schedule 11.07.2013
comment
да, вы должны сделать это в новой строке; или вы можете сделать: Dim xyz : xyz = "something"   -  person Flakes    schedule 12.07.2013
comment
проверьте это для метода createparameter, обратите внимание на использование set msdn.microsoft.com/en-us/library/windows/desktop/   -  person Flakes    schedule 12.07.2013
comment
Какая строка выдает эту ошибку?   -  person Shadow Wizard Wearing Mask V2    schedule 15.07.2013


Ответы (1)


Документация для CreateParameter метод утверждает, что:

Если вы указываете тип данных переменной длины в аргументе Type, вы должны либо передать аргумент Size, либо установить свойство Size в Parameter. объекта перед добавлением его в коллекцию Parameters; в противном случае возникает ошибка.

129 соответствует adChar, который является типом данных переменной длины и поэтому требует передачи аргумента Size. Обычно вы должны использовать определенную длину столбца в базе данных, но я обнаружил, что просто использование длины значения, которое я передаю, также работает.

person Cheran Shunmugavel    schedule 11.07.2013
comment
Мммм, полезно знать, однако, что после добавления свойства size по-прежнему выдается ошибка несоответствия типа - ошибка поставщика «80020005». Любые другие идеи. Код параметра изменен на этот Dim uPar uPar = oCmd.CreateParameter("Expenses",200,1,255,session("Expenses")) oCmd.Parameters.Append(uPar) - person Vincent Gustav; 11.07.2013