Classic Asp中的参数化查询

问题描述 投票:2回答:4

我的db访问代码如下:

set recordset = Server.CReateObject("ADODB.Recordset")
set cmd1  = Server.CreateObject("ADODB.Command")
cmd1.ActiveConnection = Conn //connection object already created
cmd1.CommandText = "SELECT * FROM lbr_catmaster where catname = ?"
cmd1.CommandType = adCmdText
set prm = cmd1.CreateParameter("@prm", 200, 1,200 , "development")
cmd1.Parameters.Append prm
set recordset = cmd1.Execute

但是没有数据包打击。请帮忙。我正在使用sql server 2005。

谢谢。

vbscript asp-classic ado
4个回答
3
投票

在我的代码中,这是我从命令获取记录集的方式:

Set rs = server.createobject("ADODB.Recordset")
Set cmd = server.createobject("ADODB.Command")

cmd.ActiveConnection = Conn //connection object already created
cmd.CommandText = "SELECT * FROM lbr_catmaster where catname = ?"
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900 

set prm = cmd.CreateParameter("@prm", 200, 1, 200, "development")
cmd.Parameters.Append prm

' Execute the query for readonly
rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenForwardOnly, adLockReadOnly

希望能帮助到你


1
投票

看起来您没有在查询中正确引用您的命名参数。

尝试更换:

cmd1.CommandText = "SELECT * FROM lbr_catmaster where catname = ?"

有:

cmd1.CommandText = "SELECT * FROM lbr_catmaster where catname = @prm"

看看是否有帮助。


1
投票

我喜欢使用Parameters.Refresh,即

set recordset = Server.CReateObject("ADODB.Recordset")
set cmd1  = Server.CreateObject("ADODB.Command")
cmd1.ActiveConnection = Conn //connection object already created
cmd1.CommandText = "SELECT * FROM lbr_catmaster where catname = ?"
cmd1.CommandType = adCmdText
cmd1.Prepared = True ' only needed if u plan to reuse this command often
cmd1.Parameters.Refresh
cmd1.Parameters(0).Value = "development"
set recordset = cmd1.Execute

0
投票

尝试不使用参数名称:

set prm = cmd1.CreateParameter(, 200, 1,200 , "development")
© www.soinside.com 2019 - 2024. All rights reserved.