【问题标题】:ADO parameterised query not returning any resultADO 参数化查询不返回任何结果
【发布时间】:2016-07-09 07:50:24
【问题描述】:

我正在使用此查询从经典 asp 页面中的 vbscript 获取一些结果,但它没有返回任何值。页面是空白的,也没有错误。请问有什么建议吗?

dim cmd, admin_no
admin_no = request.QueryString("admin")

set cmd = server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
sql = ""
sql = sql & "DECLARE @admin_no int;"
sql = sql & "SELECT field1, field2 FROM mydb.mytable where admin_no = @admin_no"
cmd.CommandText = sql
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@admin_no", adInteger, adParamInput, , admin_no)

'response.write(cmd.Parameters(0))
'response.write(cmd.CommandText)

set rs = server.CreateObject("ADODB.Recordset") 
rs.Open cmd

【问题讨论】:

    标签: sql-server vbscript asp-classic ado named-parameters


    【解决方案1】:

    这里的问题是adCmdText使用?占位符来传递参数,换行

    sql = sql & "SELECT field1, field2 FROM mydb.mytable where admin_no = @admin_no"
    

    sql = sql & "SELECT field1, field2 FROM mydb.mytable where admin_no = ?"
    

    如果you are wanting to pass named parameters 对您的查询,您没有太多选择,但这个小技巧很有用。

    sql = ""
    sql = sql & "DECLARE @admin_no int;"
    sql = sql & "SET @admin_no = ?;"
    sql = sql & "SELECT field1, field2 FROM mydb.mytable where admin_no = @admin_no"
    

    有用的链接

    【讨论】:

    • Cheers @Lankymart ,它似乎有效,但我真的想在 Sql 语句中传递参数名称,使其更具可读性,我该如何实现?当我说参数名称时,我的意思是在上面的 sql 中,我说 ...where admin_no=@admin_no 而不是 admin_no=?
    • @Pravi 我很确定你不能,ADO 不支持它。
    • @Pravi 见Is it possible to use named parameters when command type is adCmdText?。我演示了this example 中描述的解决方法。
    • 我会假设它有一些规则,字段名应该与 createParameter 函数的名称匹配,我正确吗??
    • 如果你真的想像你建议的那样命名你的参数,为什么不把它移到存储过程中呢?您拥有您正在寻找的所有命名清晰度,并且您已经朝着分离数据层和业务层迈出了一步。这将是双赢的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多