如何在传统ASP上进行参数化SQL查询?

有人可以告诉我在VBscript中使用经典ASP执行参数化SQL查询最简单的方法吗?

一个可编辑的例子将是最好的。

使用adodb.command对象。

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

我也build议使用自定义数据库访问对象,而不是直接使用adodb。 这使您可以构build更好的api,提高可testing性并为debugging/日志logging/分析添加钩子。 其次,您可以使用class_terminiate事件添加请求范围的事务,对错误进行隐式回滚。 Oure数据库访问对象提供以下查询API

 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)) 

我假设你指的是参数化的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 

更新:您需要包含要识别常量的ADOVBS.inc文件。

这是一个链接: ADOVBS.inc

包含adovbs.inc另一个选项是在ASP的顶部附近添加对以下types库的引用。 据说这比一个包含有更好的性能:

 <!--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" --> 

这里是一些types库的列表。