Sql server ASP和ADO错误:没有为一个或多个必需参数提供值
语言是vbscript和经典的ASP 在SQL语句中硬编码值时,以下SQL有效:Sql server ASP和ADO错误:没有为一个或多个必需参数提供值,sql-server,asp-classic,vbscript,ado,Sql Server,Asp Classic,Vbscript,Ado,语言是vbscript和经典的ASP 在SQL语句中硬编码值时,以下SQL有效: sql = "UPDATE STORE2_ITEM SET sku = 'abcd' WHERE id = 224 and host_id = 1" 我想做的是添加参数,因此我将field1赋值替换为以下内容: sql = "UPDATE STORE2_ITEM SET sku = ? WHERE id = 224 and host_id = 1" (暂时保持简单,看看是否可以使用此参数) 我得到以下错误: “
sql = "UPDATE STORE2_ITEM SET sku = 'abcd' WHERE id = 224 and host_id = 1"
我想做的是添加参数,因此我将field1赋值替换为以下内容:
sql = "UPDATE STORE2_ITEM SET sku = ? WHERE id = 224 and host_id = 1"
(暂时保持简单,看看是否可以使用此参数)
我得到以下错误:
“没有为一个或多个必需参数提供值。”
代码的其余部分如下:
Set DynaDb = Server.CreateObject("ADODB.Connection")
DynaDB.ConnectionString = STORE_CONNECTION_STRING
DynaDb.Open
sql = "UPDATE STORE2_ITEM SET sku = ? WHERE id = 224 and host_id = 1"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.CommandText = sql
cmd.CommandType adCmdText
cmd.Prepared = true
cmd.Parameters.Append(cmd.CreateParameter("", 200, 1, "AbcD"))
cmd.ActiveConnection = DynaDB
cmd.Execute
其他资料:
连接字符串:
Provider=SQLOLEDB.1;数据源=xxxxxxx;初始目录=xxxxxx;持久安全信息=True;用户ID=xxxx;用户Id=mkj;密码=xxxxxx
编辑:我删除了给我一个类型不匹配错误的代码,因为它真的不相关
编辑:我在此处删除了我的答案,并将其作为“答案”发布在下面。ADODB SQL Server命令字符串中参数的语法为:
@ParameterName
下面是一些示例代码:
Dim rst As ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = "Provider=SQLOLEDB.1;Data Source=(local);" &
"Integrated Security=SSPI;Initial Catalog=DatabaseName"
cmd.CommandText = "DECLARE @PARAMETER1 datetime, @PARAMETER2 datetime,
@PARAMETER3 bit;" & _
"SELECT * FROM blah, blah.... " & _
"WHERE something>= @PARAMETER3 AND " & _
"something BETWEEN @PARAMETER1 AND @PARAMETER2"
cmd.CommandType = adCmdText
Set PARAMETER1 = cmd.CreateParameter("@PARAMETER1", adDate, adParamInput)
cmd.Parameters.Append PARAMETER1
PARAMETER1.Value = "01/01/2000"
Set PARAMETER2 = cmd.CreateParameter("@PARAMETER2", adDate, adParamInput)
cmd.Parameters.Append PARAMETER2
PARAMETER2.Value = "05/01/2007"
Set PARAMETER3 = cmd.CreateParameter("@PARAMETER3", adInteger, adParamInput)
cmd.Parameters.Append PARAMETER3
PARAMETER3.Value = 0
Set rst = New ADODB.Recordset
Set rst = cmd.Execute()
其他语法:
with server.createobject("adodb.command")
.activeConnection = application("connection_string")
.commandText "update sometable set some_col=?"
.execute , array(value)
end with
从代码中删除此行:-
cmd.Prepared = true
当您使用此行(或在添加任何内容之前尝试索引到Parameters集合)时,将发生ADO往返到DB服务器,请求执行命令所需的参数集。因此,此行为您创建了所需的参数条目,但没有值
现在,当您添加参数时,除了参数集合中已经存在的正确参数之外,还添加了该参数。当您执行“extra”参数时,该参数对于需求来说是超级的,并且被忽略,但是发现正确的参数没有设置其值,因此会出现错误
通过删除该行,您可以自行正确配置参数集合,因此不需要额外的往返来创建集合。假设您添加了所有正确的参数,它应该可以工作。我已经计算出来了。安东尼和罗伯特给我指出了正确的方向 我意识到,虽然错误信息告诉我出了什么问题,但它似乎对我有误导性。当我的参数没有正确声明时,它会给我上面的错误 主要的问题是这些常量不知何故并不存在。通过输入它们的整数值,我可以让它工作。我想我一开始就意识到了这一点,这就是为什么我最初的帖子中有“200”的广告语。所以,我只是在asp的顶部声明了这些变量(顺便说一句,有人知道如何包含这些常量吗?) 此外,它似乎需要参数的大小(即,adVarChar的50)。 因此,我的最终代码如下所示(:
我看过这两个例子。使用@name符号,显然你必须声明它们。我也看到过使用“?”的例子。但是,我确实用命名参数尝试过,结果更新了postFormat??a)VBScript中没有Format函数,b)为什么要将日期格式化为字符串,只将日期作为日期传递,这是使用参数的巧妙之处之一,您不需要这种格式设置marlarky。
' Data Types
adInteger = 3
adVarChar = 200
adDecimal = 14
' Direction Constants
adParamInput = 1
adParamOutput = 2
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")
conn.ConnectionString = "Provider=SQLOLEDB.1;Data Source=BRYCE-PC7\SQLEXPRESS;Initial Catalog=Funeral;Persist Security Info=True;User ID=mkj;PASSWORD=jibenear32;"
conn.Open
cmd.ActiveConnection = conn
cmd.CommandType = 1
cmd.CommandText = "UPDATE STORE2_ITEM SET sku = ? WHERE id = 224 and host_id = 1"
Set param = cmd.CreateParameter(, adVarChar, adParamInput, 50)
param.Value = "NEW SKU"
cmd.Parameters.Append param
cmd.Execute