这是在两个查询中使用命令对象的正确方法吗?

时间:2015-05-18 10:16:44

标签: sql-server vbscript asp-classic adodb

我在连接中使用了两次命令对象。我想知道在执行时会出现问题...

set cmd = server.CreateObject("adodb.command")
cmd.Activeconnection= objConn
cmd.CommandText = "INSERT INTO XXXX VALUES(@ww,@ee)"
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@ww", adInteger, adParamInput)
cmd("@ww") = request.queryString("ww")
cmd.Parameters.Append cmd.CreateParameter("@ee", adDBTimeStamp, adParamInput)
cmd("@ee") = request.queryString("ee")
cmd.execute 

cmd.CommandText = "UPDATE xxyy SET RCS='Y', ES='T', OV='N' WHERE ww=@ww"
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@ww", adInteger, adParamInput)
cmd("@ww") = request.queryString("ww")
cmd.execute     

1 个答案:

答案 0 :(得分:2)

重用Command对象时,所有的属性/参数/等。从第一个查询转到第二个查询。因此,您提供的示例将在执行第二个查询时抛出错误,因为将为命令对象定义3个参数(@ www,@ if和@ww),而查询只需要1个参数。 (代码中也有其他错误。请参阅Lankymart的评论。)

为每个查询重新初始化命令对象更安全。示例(包括Lankymart建议的修正):

set cmd = server.CreateObject("adodb.command")
cmd.Activeconnection= objConn
cmd.CommandText = "INSERT INTO XXXX VALUES(?,?)"
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@ww", adInteger, adParamInput)
cmd("@ww") = request.queryString("ww")
cmd.Parameters.Append cmd.CreateParameter("@ee", adDBTimeStamp, adParamInput)
cmd("@ee") = request.queryString("ee")
cmd.execute 

'' REINITIALIZE THE COMMAND OBJECT
set cmd = server.CreateObject("adodb.command")
cmd.Activeconnection= objConn

cmd.CommandText = "UPDATE xxyy SET RCS='Y', ES='T', OV='N' WHERE ww=?"
cmd.CommandType = adCmdText
cmd.Parameters.Append cmd.CreateParameter("@ww", adInteger, adParamInput)
cmd("@ww") = request.queryString("ww")
cmd.execute