庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>VB专区>编程技巧>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

VB精彩教程:数据异步加载

 作者:本站收集   日期:2005-8-4 11:31:38
字号选择〖 〗/ 双击滚屏 单击停止   

VB精彩教程:数据异步加载

  异步加载是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通过。

上一篇:VB“变态”用法之有用技术和没用指针    下一篇:用vb实现DES加解密算法(三)(2)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-8-4 11:31:38
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿