程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB精彩教程:數據異步加載

VB精彩教程:數據異步加載

編輯:VB綜合教程
VB精彩教程:數據異步加載

  異步加載是ADO的一種數據加載方式,主要由記錄集的options參數來控制!
  
  ADO210.CHM中的格式:
  recordset.OpenSource,ActiveConnection,CursorType,LockType,Options
  
  Options
  可選。Long值,指示提供者計算Source參數的方式(如果該參數表示除Command對象之外的某些內容),或者指示Recordset應該從以前保存過的文件中恢復。可以是一個或多[被屏蔽廣告]
  個CommandTypeEnum或ExecuteOptionEnum值,這些值可以用位AND操作符組合。
  
  ExecuteOptionEnum
  指定提供者執行命令的方式。
  
  常量值說明
  adAsyncExecute0x10指示命令將異步執行。
  該值不能與CommandTypeEnum的值adCmdTableDirect組合。
  
  adAsyncFetch0x20指示在CacheSize屬性中指定的初始數量以後的剩余行將被異步檢索。
  adAsyncFetchNonBlocking0x40指示檢索時主線程從不會阻塞。如果未檢索到所請求的行,當前行將自行移動到文件結尾。
  如果從包含持久存儲Recordset的Stream中打開Recordset,那麼adAsyncFetchNonBlocking將不起作用;該操作將同步進行並發生阻塞。
  
  當adCmdTableDirect選項被用於打開Recordset時,adAsynchFetchNonBlocking不起作用。

  adExecuteNoRecords0x80指示命令文本是不返回行的命令或存儲過程(例如,僅插入數據的命令)。如果檢索到任何行,它們將被放棄且不返回。
  adExecuteNoRecords只能作為可選參數傳遞給Command或Connection的Execute方法。
  
  adExecuteStream0x400指示命令執行的結果應當作為流返回。
  adExecuteStream只能作為可選參數傳遞給Command的Execute方法。
  
  adExecuteRecord指示CommandText是一個命令或存儲過程,它返回應當被作為Record對象返回的單一行。
  adOptionUnspecified-1指示未指定命令。
  
  
  CommandTypeEnum
  指定解釋命令參數的方法。
  
  常量值說明
  adCmdUnspecified-1不指定命令類型的參數。
  adCmdText1按命令或存儲過程調用的文本定義計算CommandText。
  adCmdTable2按表名計算CommandText,該表的列全部是由內部生成的SQL查詢返回的。
  adCmdStoredProc4按存儲過程名計算CommandText。
  
  adCmdUnknown8默認值。指示CommandText屬性中命令的類型未知。
  adCmdFile256按持久存儲的Recordset的文件名計算CommandText。只與Recordset.Open或Requery一起使用。
  adCmdTableDirect512按表名計算CommandText,該表的列被全部返回。只與Recordset.Open或Requery一起使用。若要使用Seek方法,必須通過adCmdTableDirect打開Recordset。
  該值不能與ExecuteOptionEnum的值adAsyncExecute組合。
  
  一般用這個參數adAsyncFetch來控制,另外需要
  .Properties("InitalFetchSize")=50
  另外可以參考《MSCE的VB分布式應用的開發》
  
  舉例,Vb6.0的代碼:
  
  DimAdoRsasADODB.Recordset
  
  setAdoRs=newADODB.Recordset
  WithAdoRs
  .CursorLocation=adUseClient
  .Properties("InitialFetchSize")=50
  .OpenmstrSQL,AdoCn,adOpenStatic,adLockOptimistic,adAsyncFetch
  If.BOF=FalseOr.EOF=FalseThen
  '--------------
  else
  Endif
  EndWith
  
  總結:很多的網友都問大數量加載的問題,現在這種方式可以較快的返回數據。一般100萬數據,前面50條只需要5~6秒就返回來!這個方式需要注意的是:
  
  1、如果返數據量太大,而中途要取消,需要用AdoCn.Cancel來取消查詢,否則數據會繼續返回數據。
  
  2、如果數據量太大,記錄集的釋放會有問題。如果數據量在200M~300M時,setadors=nothing不會快速釋放高速緩存。希望有其它網友能夠提供自己的見解。

  3、對大數據量時,C/S開發中提供翻頁/網格的滾動條結合的方式,對用戶來話是極為方便。有的網友提供用存儲過程來實現。本人在開發過程用分頁控件與異步加載的數據源結合,實現了很好的數據浏覽。
  
  開發環境:VB6.0 MSSQLServer2K WindowsADS2K通過。

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved