形成记录集的方法有三种
CONN.execute rs.open Command.execute
方法用法大大不通
通常 Set rs=CONN.execute(SQL)
或直接 rs=CONN.execute(SQL)
和 Set rs=Server.CreateObject("ADODB.Recordset"
rs.open SQL,CONN,0,1 或 rs.open SQL,CONN
这种情况 通常open比上一个性能要好那么一丁点
( command对象更灵活,执行范围更广)
使用 CONN.execute 可以不用关闭直接执行下一个 set rs=conn.execute(SQL)
但性能速度会大打折扣!!
大约要慢 2~5倍!!(这是我在msSQL循环1000次亲自测试过的,不信你马上自己测试),所以执行下一个 rs=conn.execute之前!!一定要关闭掉!是个好习惯!
使用单一对象的rs rs.open在open下一个记录集之前,必需要求显示关闭,否则出错,速度在SQL,CONN,0,1的情况下可前者基本一样
所以我喜欢使用直设置一个 CreateObject("adodb.recordser"(在不需要多个记录集交错操作的情况下,多个也不碍是!)
然后从头用到尾!!!
开门关门开门关门~~~~~咵踏咵踏~~~~
最后一个 set rs=nothing 化上句号,爽!
更主要是 open提供非常灵活的操作数据库元数据的非常多的属性!!
打开百宝箱,金光灿灿什么都看见!
有很多情况下是非得用open来做的!
而conn.execute 想黑布下换胶卷~~~偷偷摸摸~~非常单一!!!
比如:
rs1.open SQL1,conn,0,1
rs.open SQL,conn,1,3
if rs(0)<0
关于Rs.Fields与conn.Execute的效率
内容:
ASP中,一般更新或修改数据库无非是用下面两种方法:
方法1:
conn.Execute "Update ...."
conn.Execute "Insert into ...."
方法2:
Set Rs.Open "select ...",conn,1,2
[Rs.AddNew]
Rs.Fields("...")= xx
Rs.Update
现在的问题是,这两种方法,那一种效率更高?
我个人是习惯用conn.Execute的,因为它操作比效方便,少了好几个步骤。
但无奈本人是个效率主义者,想清楚这两者的效率区别。
或者说这两种方法,在不同的操作上,各自的优缺点。
关于conn.execute 的介绍及用法
Public Sub ExecuteX()
Dim strSQLChange As String
Dim strSQLRestore As String
Dim strCnn As String
Dim cnn1 As ADODB.Connection
Dim cmdChange As ADODB.Command
Dim rstTitles As ADODB.Recordset
Dim errLoop As ADODB.Error
\' 定义两个 SQL 语句作为命令文本执行。
strSQLChange = "UPDATE Titles SET Type = " & _
"\'self_help\' WHERE Type = \'psychology\'"
strSQLRestore = "UPDATE Titles SET Type = " & _
"\'psychology\' WHERE Type = \'self_help\'"
\' 打开连接。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set cnn1 = New ADODB.Connection
cnn1.Open strCnn
\' 创建命令对象。
Set cmdChange = New ADODB.Command
Set cmdChange.ActiveConnection = cnn1
cmdChange.CommandText = strSQLChange
\' 打开标题表。
Set rstTitles = New ADODB.Recordset
rstTitles.Open "titles", cnn1, , , adCmdTable
\' 打印原始数据报告。
Debug.Print _
"Data in Titles table before executing the query"
PrintOutput rstTitles
\' 清除 Errors 集合的外部错误。
cnn1.Errors.Clear
\' 调用 ExecuteCommand 子例程执行 cmdChange 命令。
ExecuteCommand cmdChange, rstTitles
\' 打印新数据报告。
Debug.Print _
"Data in Titles table after executing the query"
PrintOutput rstTitles
\' 使用 Connection 对象的 execute 方法执行 SQL 语句以恢复数据。
\' 捕获错误,必要时检查 Errors 集合。
On Error GoTo Err_Execute
cnn1.Execute strSQLRestore, , adExecuteNoRecords
On Error GoTo 0
\' 通过再查询记录集检索当前数据。
rstTitles.Requery
\' 打印已恢复数据的报告。
Debug.Print "Data after executing the query " & _
"to restore the original information"
PrintOutput rstTitles
rstTitles.Close
cnn1.Close
Exit Sub
Err_Execute:
\' 将任何由执行查询引起的错误通知用户。
If Errors.Count > 0 Then
For Each errLoop In Errors
MsgBox "Error number: " & errLoop.Number & vbCr & _
errLoop.Description
Next errLoop
End If
Resume Next
End Sub
Public Sub ExecuteCommand(cmdTemp As ADODB.Command, _
rstTemp As ADODB.Recordset)
Dim errLoop As Error
\' 运行指定的 Command 对象。捕获错误,必要时检查 Errors 集合。
On Error GoTo Err_Execute
cmdTemp.Execute
On Error GoTo 0
\' 通过再查询记录集检索当前数据。
rstTemp.Requery
Exit Sub
Err_Execute:
\' 将任何由执行查询引起的错误通知用户。
If Errors.Count > 0 Then
For Each errLoop In Errors
MsgBox "Error number: " & errLoop.Number & vbCr & _
errLoop.Description
Next errLoop
End If
Resume Next
End Sub
Public Sub PrintOutput(rstTemp As ADODB.Recordset)
\' 枚举 Recordset。
Do While Not rstTemp.EOF
Debug.Print " " & rstTemp!Title & _
", " & rstTemp!Type
rstTemp.MoveNext
Loop
End Sub
就是这样用的。在你需要的过程中调用这个过程。