Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/141.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 多步骤OLE DB操作使用参数化查询生成错误_Sql Server_Asp Classic - Fatal编程技术网

Sql server 多步骤OLE DB操作使用参数化查询生成错误

Sql server 多步骤OLE DB操作使用参数化查询生成错误,sql-server,asp-classic,Sql Server,Asp Classic,此查询执行正常,但当我稍后尝试一个几乎相同的查询时 sqlCmd.CommandText = "SELECT clientID, clientPassword" & _ " FROM Clients" & _ " WHERE (clientPassword=?)" Set param = sqlCmd.CreateParameter("@clientPassword", 200, 1, Len(p

此查询执行正常,但当我稍后尝试一个几乎相同的查询时

sqlCmd.CommandText = "SELECT clientID, clientPassword" & _
                     " FROM Clients" & _
                     " WHERE (clientPassword=?)"
Set param = sqlCmd.CreateParameter("@clientPassword", 200, 1, Len(pass), pass)
sqlCmd.Parameters.Append param

Set rsUsers = sqlCmd.Execute
我得到这个错误

多步骤OLE DB操作生成错误。检查每个OLE DB状态值(如果可用)。没有做任何工作

两列都是nvarchar,长度分别为255和50

我的大多数谷歌搜索都说这是一个数据类型错误,但我只是在检索值,如果自己执行第二个查询,它就可以正常工作。只有在运行多个查询时才会发生错误

谢谢你

谢谢Eduardo,这让我顺利完成了查询,没有任何错误,但我的更新查询没有任何作用

sqlCmd.CommandText = "SELECT clientID, clientUsername, clientPassword" & _
                     " FROM Clients" & _
                     " WHERE (clientEmail=?)"
Set param = sqlCmd.CreateParameter("@clientEmail", 200, 1, Len(email), email)
sqlCmd.Parameters.Append param

Set rsUsers = sqlCmd.Execute

知道为什么吗?这段代码我已经用了好几天了。

您是否重新初始化了
sqlCmd
变量

我想你失踪了

sqlCmd.CommandText = "UPDATE Clients" & _ 
                     " SET clientUsername=?, clientPassword=?" & _ 
                     " WHERE (clientEmail=?)" 
Set param = sqlCmd.CreateParameter("@clientEmail", 200, 1, Len(email), email)    
sqlCmd.Parameters.Append param 
Set param = sqlCmd.CreateParameter("@clientUsername", 200, 1, Len(user), user)
sqlCmd.Parameters.Append param 
Set param = sqlCmd.CreateParameter("@clientPassword", 200, 1, Len(pass), pass)    
sqlCmd.Parameters.Append param 
Set rsUsers = sqlCmd.Execute 
在运行第二个之后

编辑后再编辑
顺序很重要,因此您需要按照在查询中使用参数的相同顺序添加参数

Set sqlCmd = server.createobject("ADODB.Command")

clientPassword和ClientMail列的数据类型和长度是否相同?email变量的值是否比clientEmail列长?是否重复使用相同的sqlCmd?如果是,sqlCmd.Parameters有两个参数,而不是一个。使用其他sqlCmd或使用sqlCmd.Refresh。请参阅修订的问题。我无法在评论上获得正确的格式。我认为这是不对的。你是说我需要3个不同的对象,而实际上参数是一个集合。不管怎样,我还是试过了,但没用。在附加参数后,我重新设置并再次使用它。这应该不是问题。另外:顺序很重要,所以您需要按照在queryCool中使用参数的相同顺序添加参数,这就是它最终所做的。我看过的每个教程都只展示了如何添加一个,因此它们的用处有限。重复使用param 3次效果良好。非常感谢你。
Set param = sqlCmd.CreateParameter("@clientUsername", 200, 1, Len(user), user)
sqlCmd.Parameters.Append param 
Set param = sqlCmd.CreateParameter("@clientPassword", 200, 1, Len(pass), pass)    
sqlCmd.Parameters.Append param 
Set param = sqlCmd.CreateParameter("@clientEmail", 200, 1, Len(email), email)    
sqlCmd.Parameters.Append param     
Set rsUsers = sqlCmd.Execute