【问题标题】:How to make a parametrized SQL Query on Classic ASP?如何在经典 ASP 上进行参数化 SQL 查询?
【发布时间】:2010-07-30 19:22:53
【问题描述】:

谁能告诉我在 VBscript 中使用 Classic ASP 执行参数化 SQL 查询的最简单方法?

最好有一个可编译的例子。

【问题讨论】:

  • 你指的是参数化的 SQL 查询吗?
  • 是的。将更新问题以澄清。谢谢!

标签: sql asp-classic vbscript


【解决方案1】:

使用 adodb.command 对象。

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

我还建议使用自定义数据库访问对象,而不是直接使用 adodb。这使您可以构建更好的 api,提高可测试性并添加用于调试/日志记录/分析的钩子。其次,您可以使用 class_terminate 事件添加带有隐式回滚错误的请求范围事务。 Oure db 访问对象提供以下查询 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))

【讨论】:

  • 非常优雅且极简的 vbscript - 我喜欢它!
  • 如果列是数字并且值为空,这不起作用。有没有办法在不使用 ADODB.Command.CreateParameter 的情况下工作?
  • 设置CommandText属性后调用objCommand.Parameters.Refresh会起作用。数组中的空元素必须替换为 Null。
【解决方案2】:

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

【讨论】:

【解决方案3】:

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

<!--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 是一些类型库的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多