VB精彩教程:資料非同步載入

來源:互聯網
上載者:User

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通過。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.