ASP中的ADO LIKE查询(vbs)

时间:2010-06-30 08:17:32

标签: asp-classic vbscript ado

我有这样的查询:

SELECT TaFellesVaktjournal.*, TaBygg.ByggNavn
FROM TaFellesVaktjournal LEFT JOIN TaBygg ON
TaFellesVaktjournal.VaktFellesByggNavnId =
TaBygg.ByggBudsjtilstEiendom WHERE VaktjFellesDato
>= @dtfr AND VaktjFellesDato <= @dttl AND (VaktFellesSak
= @sok OR VaktjFellesHendelse = @sok) ORDER BY
VaktjFellesDato DESC, VaktjFellesTid DESC

但是,我收到一条错误,指出No value given for one or more required parameters.。 我已经为@dtfr,@ dttl和@sok指定了值。此外,如果我将包含@sok(@dttl之后的所有内容)的部分删除到ORDER BY,则错误消失。

我做了shure我为sok指定了值,并且它不是空的。我甚至尝试过指定2个名为sok的参数(因为它们是两个地方)。有谁知道我怎么能这样做?

我用来创建参数的代码如下:

Dim conn, cmd, param
set cmd = server.createobject("adodb.command")
set param = server.createobject("adodb.parameter")
set param = cmd.createparameter("@sok", adVarChar, adParamInput, 255, sok)
cmd.parameters.append param

2 个答案:

答案 0 :(得分:0)

您可以尝试使用刷新命令填充参数集合。

Set cmd.ActiveConnection = oConn
oCmd.CommandType=adCmdStoredProc
oCmd.CommandText="ap_Your_spName"
oCmd.Parameters.Refresh
oCmd.Parameters("@dtfr") = dtfr
oCmd.Parameters("@dttl") = dttl
oCmd.Parameters("@sok") = sok
oCmd.Execute

将导致往返服务器,但现代计算机应该应对它!

答案 1 :(得分:0)

它适用于“普通”sql语句,类似于它适用于storedprocedures。您必须将命令对象的CommandType属性设置为“正常”sql语句的adCmdText并且您必须使用q questionmark“?”而不是参数名称。

您不需要刷新方法,ado会自动为您执行此操作。 (它仅对存储过程有用)

dim sql
dim cmd : set cmd = server.createObject("ADODB.Command")
dim param, rs

sql = "SELECT TaFellesVaktjournal.*, TaBygg.ByggNavn" &_
      " FROM TaFellesVaktjournal" &_
      " LEFT JOIN TaBygg ON TaFellesVaktjournal.VaktFellesByggNavnId = TaBygg.ByggBudsjtilstEiendom" &_
      " WHERE VaktjFellesDato >= ?" &_
      " AND VaktjFellesDato <= ?" &_
      " AND (VaktFellesSak= ? OR VaktjFellesHendelse = ?)" &_
      " ORDER BY VaktjFellesDato DESC, VaktjFellesTid DESC"

cmd.ActiveConnection = conn
cmd.CommandType = adCmdText

set param = cmd.CreateParameter("dtfr", adVarChar, , 255, dtfr)
cmd.Parameters.Append param

set param = cmd.CreateParameter("dtfr2", adVarChar, , 255, dtfr)
cmd.Parameters.Append param

set param = cmd.CreateParameter("dttl", adVarChar, , 255, dttl)
cmd.Parameters.Append param

set param = cmd.CreateParameter("sok", adVarChar, , 255, sok)
cmd.Parameters.Append param

cmd.CommandText = sql

set rs = cmd.execute

set param = nothing
set cmd = nothing