ASP / MySQL - параметризованные запросы - PullRequest
0 голосов
/ 14 октября 2011

В приведенном ниже примере кода вы видите, что я пытался разобраться с параметризованными запросами в ASP и MySQL.

Я здесь что-то делаю не так и хотел бы знать, что это такое. В моем примере вы можете увидеть два запроса. Если я пропущу последний запрос (под строкой '////////), этот скрипт работает. Как только я добавляю последний запрос, я получаю следующую ошибку:

"Многошаговая операция OLE DB вызвала ошибки. Проверьте каждую OLE DB значение статуса, если доступно. Никакой работы сделано не было. "

Я действительно не уверен, что делаю неправильно. Я погуглил ошибку, и она что-то говорила о типах данных, но в моей пустой голове не было!

Объявляю ли я параметры (.createParameter) в нужном месте, так как я обрабатываю несколько запросов? Должны ли они быть объявлены перед всеми запросами?

Мой код

Set connContent = Server.CreateObject("ADODB.Connection") 
connContent.ConnectionString="...blah..blah..blah..."
connContent.Open

Set cmdContent = Server.CreateObject("ADODB.Command")
Set cmdContent.ActiveConnection = connContent

cmdContent.Prepared = True

Const ad_varChar = 200
Const ad_ParamInput = 1
Const ad_Integer = 3
Const ad_DBDate = 133 
Const ad_DBTimeStamp = 135

theNumber = 23
theText = "Hello there!"
theDate = "2011-10-15"

SQL = " INSERT INTO testTable (integerCol) VALUES (?); "

Set newParameter = cmdContent.CreateParameter("@theNumber", ad_Integer, ad_ParamInput, 50, theNumber)
cmdContent.Parameters.Append newParameter

cmdContent.CommandText = SQL
cmdContent.Execute

' ////////////

SQL = " INSERT INTO testTable (varCharCol) VALUES (?); "

Set newParameter = cmdContent.CreateParameter("@theText", ad_varChar, ad_ParamInput, 50, theText)
cmdContent.Parameters.Append newParameter

cmdContent.CommandText = SQL
cmdContent.Execute

UPDATE:

Я получил оба запроса, но мне пришлось установить другой объект команды и активное соединение, как показано ниже. Хотя это работает, правильно ли это делать с моим типом соединения? Должен ли я устанавливать для объекта команды ничего после каждого запроса?

' ////////////

Set cmdContent = Server.CreateObject("ADODB.Command")
Set cmdContent.ActiveConnection = connContent

SQL = " INSERT INTO testTable (varCharCol) VALUES (?); "

Set newParameter = cmdContent.CreateParameter("@theText", ad_varChar, ad_ParamInput, 50, theText)
cmdContent.Parameters.Append newParameter

cmdContent.CommandText = SQL
cmdContent.Execute

1 Ответ

2 голосов
/ 14 октября 2011

Я считаю, что ваша проблема в том, что оба оператора вставки используют один и тот же объект команды. Из-за этого вторая команда будет содержать оба параметра, и я считаю, что именно это вызывает исключение, которое вы видите.

Чтобы исправить проблему, добавьте:

Set cmdContent = Server.CreateObject("ADODB.Command")
Set cmdContent.ActiveConnection = connContent

после вашего //// комментария и все должно заработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...