异步加载是ADO的一种数据加载方式,主要由记录集的options参数来控制!
ADO210.CHM中的格式:
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
Options
可选。Long 值,指示提供者计算 Source 参数的方式(如果该参数表示除 Command 对象之外的某些内容),或者指示 Recordset 应该从以前保存过的文件中恢复。可以是一个或多个 CommandTypeEnum 或 ExecuteOptionEnum 值,这些值可以用位 AND 操作符组合。
ExecuteOptionEnum
指定提供者执行命令的方式。
常量 值 说明
adAsyncExecute 0x10 指示命令将异步执行。
该值不能与 CommandTypeEnum 的值 adCmdTableDirect 组合。
adAsyncFetch 0x20 指示在 CacheSize 属性中指定的初始数量以后的剩余行将被异步检索。
adAsyncFetchNonBlocking 0x40 指示检索时主线程从不会阻塞。如果未检索到所请求的行,当前行将自行移动到文件结尾。
如果从包含持久存储 Recordset 的 Stream 中打开 Recordset,那么 adAsyncFetchNonBlocking 将不起作用;该操作将同步进行并发生阻塞。
当 adCmdTableDirect 选项被用于打开 Recordset 时,adAsynchFetchNonBlocking 不起作用。
adExecuteNoRecords 0x80 指示命令文本是不返回行的命令或存储过程(例如,仅插入数据的命令)。如果检索到任何行,它们将被放弃且不返回。
adExecuteNoRecords 只能作为可选参数传递给 Command 或 Connection 的 Execute 方法。
adExecuteStream 0x400 指示命令执行的结果应当作为流返回。
adExecuteStream 只能作为可选参数传递给 Command 的 Execute 方法。
adExecuteRecord 指示 CommandText 是一个命令或存储过程,它返回应当被作为 Record 对象返回的单一行。
adOptionUnspecified -1 指示未指定命令。
CommandTypeEnum
指定解释命令参数的方法。
常量 值 说明
adCmdUnspecified -1 不指定命令类型的参数。
adCmdText 1 按命令或存储过程调用的文本定义计算 CommandText。
adCmdTable 2 按表名计算 CommandText,该表的列全部是由内部生成的 SQL 查询返回的。
adCmdStoredProc 4 按存储过程名计算 CommandText
adCmdUnknown 8 默认值。指示 CommandText 属性中命令的类型未知。
adCmdFile 256 按持久存储的 Recordset 的文件名计算 CommandText。只与 Recordset.Open 或 Requery 一起使用。
adCmdTableDirect 512 按表名计算 CommandText,该表的列被全部返回。只与 Recordset.Open 或 Requery 一起使用。若要使用 Seek 方法,必须通过 adCmdTableDirect 打开 Recordset。
该值不能与 ExecuteOptionEnum 的值 adAsyncExecute 组合。
一般用这个参数adAsyncFetch来控制,另外需要
.Properties("Inital Fetch Size")=50
另外可以参考《MSCE的VB分布式应用的开发》
举例,Vb6.0的代码:
Dim AdoRs as ADODB.Recordset
set AdoRs =new ADODB.Recordset
With AdoRs
.CursorLocation = adUseClient
.Properties("Initial Fetch Size") = 50
.Open mstrSQL, AdoCn, adOpenStatic, adLockOptimistic, adAsyncFetch
If .BOF = False Or .EOF = False Then
'--------------
else
End if
End With
总结:很多的网友都问大数量加载的问题,现在这种方式可以较快的返回数据。一般100万数据,前面50条只需要5~6秒就返回来!这个方式需要注意的是:
1。如果返数据量太大,而中途要取消,需要用AdoCn.Cancel来取消查询,否则数据会继续返回数据。
2。如果数据量太大,记录集的释放会有问题。如果数据量在200M~300M时,set adors=nothing 不会快速释放高速缓存。希望有其它网友能够提供自己的见解。
3。对大数据量时,C/S开发中提供翻页/网格的滚动条结合的方式,对用户来话是极为方便。有的网友提供用存储过程来实现。本人在开发过程用分页控件与异步加载的数据源结合,实现了很好的数据浏览。
开发环境:VB6.0+MS SQL Server 2K +Windows ADS 2K通过
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>