Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ASP和ADO错误:没有为一个或多个必需参数提供值_Sql Server_Asp Classic_Vbscript_Ado - Fatal编程技术网

Sql server ASP和ADO错误:没有为一个或多个必需参数提供值

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" (暂时保持简单,看看是否可以使用此参数) 我得到以下错误: “

语言是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"
(暂时保持简单,看看是否可以使用此参数)

我得到以下错误:

“没有为一个或多个必需参数提供值。”

代码的其余部分如下:

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