2009-04-20 2 views
9

Может ли кто-нибудь показать мне самый простой способ выполнить параметризованный SQL-запрос с использованием классического ASP в VBscript?Как сделать параметризованный SQL-запрос на классическом ASP?

Компилируемый пример был бы лучшим.

+0

Вы имеете в виду параметризованный запрос SQL? –

+0

есть. собирается уточнить вопрос, чтобы уточнить. благодаря! –

ответ

13

Используйте объект adodb.command.

with createobject("adodb.command") 
    .activeConnection = application("connectionstring") 
    .commandText = "select * from sometable where id=?" 
    set rs = .execute(,array(123)) 
end with 

Я также рекомендую использовать пользовательский объект доступа db вместо прямого использования adodb. Это позволяет вам создавать более приятный api, улучшает тестируемость и добавлять крючки для отладки/регистрации/профилирования. Во-вторых, вы можете добавлять транзакции с охватом запросов с неявным откатом на ошибках, используя событие class_terminiate. Oure дБ объект доступа предлагает следующие генерироваться единообразно

call db.execute("update some_table set column=? where id=?", array(value, id)) 
set rs = db.fetch_rs("select * from some_table where id=?", array(id)) 
count = db.fetch_scalar("select count(*) from some_table where column > ?", array(value)) 
+0

Как мне обрабатывать ошибки в этом? – Geshan

+0

очень элегантный и минимальный vbscript - мне это нравится! –

+0

Это не работает, если столбец является числовым, а значение равно null. Есть ли способ для этого работать без использования ADODB.Command.CreateParameter? –

11

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

Set adoCon = Server.CreateObject("ADODB.Connection") 
adoCon.Open "connectionstring" 
SET cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = adoCon 
cmd.CommandType= adCmdStoredProc 
cmd.CommandText = "GetCustomerByFirstName" 

cmd.Parameters.Append cmd.CreateParameter("@FirstName",adVarchar,adParamInput,50,"John")  

Set Rec = cmd.Execute() 
While NOT Rec.EOF 
    'code to iterate through the recordset 
    Rec.MoveNext 
End While 

UPDATE: Вы должны включить файл ADOVBS.inc для констант, которые будут признаны.

Вот ссылка: ADOVBS.inc

+0

Мне нужно включить некоторый файл, чтобы получить ASP для распознавания констант adVarchar и adParamInput? –

+1

Да. Вот ссылка на этот файл http://www.asp101.com/articles/john/adovbs/adovbs.inc.txt –

+0

Это предложение было очень полезно в сценарии хранимых процедур – Thanigainathan

8

Другой вариант, включая adovbs.inc это добавить ссылку на следующую библиотеку типа вблизи верхней части ASP. Предположительно, это имеет более высокую производительность, чем включаемый:

<!--METADATA TYPE="TypeLib" NAME="ADODB Type Library" UUID="00000205-0000-0010-8000-00AA006D2EA4" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" VERSION="2.5" --> 

Here список некоторых библиотек типов.

+1

+1 отличное предложение! – Abel

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