我始终觉得编译好的语句速度比较快。
VB可否这样,对于一条语句,里面包含一些固定的参数,
然后向这些固定的参数赋值
然后执行我看了command对象的帮助,只发现一些执行存储过程的例子比如我要插入一个包含很大字段的记录,怎么做?
我知道recordset的addnew可以做到,
但是这个recordset要先open,我总觉得这个open效率不高想听听你的见解?
VB可否这样,对于一条语句,里面包含一些固定的参数,
然后向这些固定的参数赋值
然后执行我看了command对象的帮助,只发现一些执行存储过程的例子比如我要插入一个包含很大字段的记录,怎么做?
我知道recordset的addnew可以做到,
但是这个recordset要先open,我总觉得这个open效率不高想听听你的见解?
sql可以负责预先编译
不过,由vb向数据库提交sql语句要经过二次编译,调用存储过程是最好、最快的方法.
所以很不爽很同意 Rabbitsy(sz) ,我的程序有一个连接池,可以给需要的
程序段分配连接。
在实现的过程中,我有一个疑问,某个函数内有一个connection的变量,
这个connection已经被close了,但是没有set成nothing,
这个程序段结束以后,这个变量占用的空间应该被释放了吧?
功能:
指示执行前是否保存命令的编译版本。设置和返回值:设置或返回布尔型值。说明:使用 Prepared 属性可使提供者在首次执行 Command 对象前保存 CommandText 属性中指定的已准备好(已编译)的查询版本。该属性会降低命令首次执行的速度,但提供者对命令进行编译后,在后继的命令执行中提供者可使用已编译好命令版本,这样可以提高执行性能。如果该属性为 False,提供者将直接执行 Command 对象而不创建编译版本。如果提供者不支持命令准备,将该属性设置为 True 时也许将返回错误。如果没有返回错误,则只需要忽略准备命令的请求并将 Prepared 属性设置为 False 即可。示例:
通过打开两个 Command 对象(一个是准备好的,另一个是未准备好的)演示 Prepared 属性。
Public Sub PreparedX() Dim cnn1 As ADODB.Connection
Dim cmd1 As ADODB.Command
Dim cmd2 As ADODB.Command
Dim strCnn As String
Dim strCmd As String
Dim sngStart As Single
Dim sngEnd As Single
Dim sngNotPrepared As Single
Dim sngPrepared As Single
Dim intLoop As Integer ' 打开连接。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set cnn1 = New ADODB.Connection
cnn1.Open strCnn ' 为相同命令(一个是准备好的,另一个是未准备好的)创建两个命令对象。
strCmd = "SELECT title, type FROM titles ORDER BY type"
Set cmd1 = New ADODB.Command
Set cmd1.ActiveConnection = cnn1
cmd1.CommandText = strCmd
Set cmd2 = New ADODB.Command
Set cmd2.ActiveConnection = cnn1
cmd2.CommandText = strCmd
cmd2.Prepared = True
' 设置一个计时器,而后执行未准备好的命令 20 次。
sngStart = Timer
For intLoop = 1 To 20
cmd1.Execute
Next intLoop
sngEnd = Timer
sngNotPrepared = sngEnd - sngStart
' 重置计时器,而后执行准备好的命令 20 次。
sngStart = Timer
For intLoop = 1 To 20
cmd2.Execute
Next intLoop
sngEnd = Timer
sngPrepared = sngEnd - sngStart ' 显示执行结果。
MsgBox "Performance Results:" & vbCr & _
" Not Prepared: " & Format(sngNotPrepared, _
"##0.000") & " seconds" & vbCr & _
" Prepared: " & Format(sngPrepared, _
"##0.000") & " seconds"
cnn1.CloseEnd Sub
set cn=nothing