2015-05-18 1 views
-1

Я дважды использовал объект команды в соединении. я хотел бы знать, будет ли проблема при выполнении ...Правильно ли это использовать объект Command в двух запросах ...?

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 [email protected]" 
cmd.CommandType = adCmdText 
cmd.Parameters.Append cmd.CreateParameter("@ww", adInteger, adParamInput) 
cmd("@ww") = request.queryString("ww") 
cmd.execute  
+2

Вы пытались выполнить код? Кроме того, это не ASP.NET или VB.NET - попробуйте пересмотреть свой вопрос. – Paul

+0

Нет, 'adCmdText' не принимает именованные параметры' @ ww' и '@ ee'. Вам нужно использовать '?' Placehholder, изменить 'INSERT INTO XXXX VALUES (@ ww, @ ee)' на 'INSERT INTO XXXX VALUES (?,?)' Оставить методы 'CreateParameter()' одинаковыми. То же самое относится и к 'UPDATE' SQL' @ EnrolID' должно быть '?'. – Lankymart

+1

Мой вопрос: мне нужно определить другую команду Object ie cmd для нижеследующего запроса или тот же самый объект cmd можно использовать для выполнения другого запроса ... – Papai

ответ

2

При повторном использовании объекта Command, все своих свойств/параметров/и т.д.. из первого запроса переносятся на второй запрос. Таким образом, приведенный вами пример приведет к ошибке при выполнении второго запроса, потому что для объекта команды будут определены 3 параметра (@ww, @ee и @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 
+2

Абсолютно точно! Отличное объяснение. У вас также есть возможность использовать 'Refresh()' * (если поддерживается провайдером) * для переоценки параметров или использования 'cmd.Parameters (n) .Delete()' внутри цикла 'For Next', чтобы очистить параметры перед тем, как начать. Но, как предложил Кейт, повторная инициализация объекта «Command» намного проще. – Lankymart