0

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

我正在使用经典 ASP、SQL Server 2008 R2。我一直在使用这样的 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

我有几个需要更新的表,每次更新都会更新不同的列集。像这样使用 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

我很感激任何建议。
谢谢。

4

1 回答 1

0

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

以这种方式使用 ADO 充其量是陈旧的并且性能很差。

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

于 2012-07-12T17:58:51.527 回答