Stored procedures 使用ADO与存储过程进行创建和更新

Stored procedures 使用ADO与存储过程进行创建和更新,stored-procedures,asp-classic,ado,Stored Procedures,Asp Classic,Ado,使用ADO与存储过程进行创建和更新 我使用的是经典的ASP,SQLServer2008R2。我一直在使用ADO进行创建和更新: sSQL = "select <column list> from <table>" set rsMyTable = Server.CreateObject ("ADODB.Recordset") rsMyTable.cursorType = 2 sMyTable.LockType = 3 rsMyTable.open sqlstr, ob

使用ADO与存储过程进行创建和更新

我使用的是经典的ASP,SQLServer2008R2。我一直在使用ADO进行创建和更新:

sSQL = "select <column list> from <table>"

set rsMyTable = Server.CreateObject ("ADODB.Recordset")
rsMyTable.cursorType = 2 
sMyTable.LockType = 3 
rsMyTable.open sqlstr, objMyConnection     
rsMyTable.addnew

rsMyTable("Mycol1") = myValue1
rsMyTable("Mycol2") = myValue2
rsMyTable.update
rsMyTable.close
set rsMyTable = nothing
sSQL=“从中选择”
set rsMyTable=Server.CreateObject(“ADODB.Recordset”)
rsMyTable.cursorType=2
sMyTable.LockType=3
rsMyTable.open sqlstr,objMyConnection
rsMyTable.addnew
rsMyTable(“myCL1”)=myValue1
rsMyTable(“myCL2”)=myValue2
rsMyTable.update
rsMyTable.close
设置rsMyTable=nothing
我有几个表需要更新,每次更新都会更新不同的列集。像这样使用ADO是一种不好的做法吗?我是否应该为每次更新创建存储过程,并使用ADO将参数传递给存储过程,而不是使用ADO,如下所示:

sqlstr = "myUpdateProcedure"
set objCmd = Server.CreateObject("ADODB.Command")
set objParam = Server.CreateObject("ADODB.Parameter")

set objCmd.ActiveConnection = objConnection
objCmd.commandText = sqlstr
objCmd.CommandType = 4   ''stored proc.

set objParam = objCmd.CreateParameter("param1", 19, 1, , value1)
objCmd.Parameters.Append objParam
set objParam = objCmd.CreateParameter("param2", 200, 1, <maxlength>, value2)
objCmd.Parameters.Append objParam
....
set rsTemp = Server.CreateObject("ADODB.Recordset")
rsTemp.CursorLocation = adUseClient
rsTemp.CursorType = adOpenKeyset
set rsTemp = objCmd.Execute()

....

''cleanup.
set objParam = Nothing
set objCmd = Nothing
Set rsTemp = Nothing
sqlstr=“MyUpdateProcess”
设置objCmd=Server.CreateObject(“ADODB.Command”)
设置objParam=Server.CreateObject(“ADODB.Parameter”)
设置objCmd.ActiveConnection=objConnection
objCmd.commandText=sqlstr
objCmd.CommandType=4''存储过程。
设置objParam=objCmd.CreateParameter(“param1”,19,1,value1)
objCmd.Parameters.Append objParam
设置objParam=objCmd.CreateParameter(“param2”,200,1,value2)
objCmd.Parameters.Append objParam
....
set rsTemp=Server.CreateObject(“ADODB.Recordset”)
rsTemp.CursorLocation=adUseClient
rsTemp.CursorType=adOpenKeyset
设置rsTemp=objCmd.Execute()
....
“清理。
设置objParam=Nothing
设置objCmd=Nothing
设置rsTemp=Nothing
非常感谢您的建议。

谢谢。

创建一个存储过程来执行所有更新。然后,您可以使用事务来确保执行或回滚所有更新。换句话说,将VBScript中当前的逻辑移动到T-SQL

以这种方式使用ADO最多只能算是Arcachic,而且性能很差

如果要传递的参数很多或要更新的行数,请考虑使用XML作为传输到存储过程。