2012-07-12 76 views
0

使用ADO与存储过程进行创建和更新使用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 

我明白任何建议。
谢谢。

回答

0

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

以这种方式使用ADO最好是arcahic,性能不佳。

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