使用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 :(得分:0)
创建存储过程以执行所有更新。然后,您可以使用事务来确保执行或回滚所有更新。换句话说,将您当前在VBScript中的逻辑移动到T-SQL。
以这种方式使用ADO充其量只是表现不佳而且表现不佳。
如果要传递大量参数或要更新多行,请考虑使用XML作为存储过程的传输。