亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

什幺是數據庫游標

系統 2220 0

1. 什幺是游標?

游標,也有人稱為光標。概括的講,它是基于記錄的。

過去,關系型數據庫沒有象現在這樣被廣泛的應用。那時候,人們大多使用 dBase 這樣的小型數據庫軟件。這類數據庫確切的說應為數據文件管理軟件。他們是面向記錄的。

不過,這種方式也許更符合人們的習慣。比如,我們在電話本中查找號碼,在學生檔案中查找檔案,最終都要歸結于其中的一個號碼,一個檔案,那就是一條記錄?,F實生活中,我們在一張表格中尋找某一項時,可能會用手一條一條逐行的掃過,以幫助我們找到所需的那條記錄。對應于數據庫來說,這就是游標的模型。所以,你可以這樣想象:表格是數據庫中的表,而我們的手好比是游標。

所以,當你使用類似 .MoveNext,.MoveLast 這樣的語句時,覺得再自然不過了。

現在,你明白什幺是游標了吧。游標就是數據的 ' 定位系統 ' 。

這個 ' 定位系統 ' 粗分有兩種:服務器游標和客戶游標。對應于 ADO 中的 CursorLocation 。舉例來說:

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseServer????? '缺省,使用服務器游標
.....
rs.CursorLocation = adUseClient????? '使用客戶游標

2. 什幺是服務器游標?

或者稱為 API 服務器游標。

假設你要查詢有關編程語言的書,寫成 SQL 語句就是:SELECT book_id,book_title FROM books WHERE book_catalog = '編程' ORDER BY book_title,同時你指定使用服務器游標。

這條語句發送到服務器,服務器對數據進行檢索,將符合查詢條件的記錄集合放入臨時表(對某些游標類型是這樣)中。每當你進行 .MoveNext 操作,服務器就會發送一條記錄到客戶端的緩沖區,然后你才可以使用它。

3. 什幺是 CacheSize ?

繼續上面的例子,假設符合查詢條件的記錄有100個,也就是說,用 .MoveNext 這種方法遍歷該結果集需要同服務器交互100次。我們可以通過設置 CacheSize 使客戶與服務器的通信變少。上面的例子其實就是 CacheSize=1 的情況,這是缺省值。

假設 CacheSize=4,當 RecordSet 對象打開時,服務器發送4條記錄到客戶端。前4次的 .MoveNext 操作實際上是在客戶緩沖區中得到數據,當第5次 .Movenext 時,服務器才發送下一個4條記錄。由此,減少了客戶與服務器間的網絡通信。

那幺是不是說 CacheSize 越大越好呢?千萬不要想當然。萬事都有兩面性,CacheSize 也一樣。客戶端請求數據,服務器發送數據,這個過程有點象交通管理。CacheSize 過高,會阻塞交通,甚至引起數據丟失(比如當 Cachesize 大于客戶端緩沖區時)。對于不同的應用,所取的值也不同。

另外要指出的是,使用任何形式的游標都不是最有效的訪問數據的方法,Cachesize 有的時候并不是瓶頸,盡量將使用游標的程序轉換為面向結果集的程序,性能會提高很多。

3. 什幺是客戶游標?

既然游標是數據的 ' 定位系統 ',那幺在客戶端也可以完成。

客戶游標的產生由來已久,當初是為了彌補服務器的不足(有些數據庫引擎就不支持游標)。隨著服務器游標的出現,客戶游標似乎已經過時了,不過還是那句話:萬事都有兩面性,在 internet 上,與數據庫的連接并不是永久的,使用客戶游標能使我們獲得同使用服務器游標一樣的功能。

當 CursorLoction 屬性設成 adUseClient 時,微軟的游標服務( Cursor Service )創建 RecordSet 對象,用前向 / 只讀的游標方式從服務器將所有查詢結果檢索出來,并且存儲在客戶緩沖區中。當應用程序通過 ADO 請求數據時,游標服務就從客戶緩沖區中檢取數據。這種方式在連接遠程服務器時非常有用,它會提高應用程序的性能。如果你訪問的數據庫是 Jet 數據庫( Access ),而且在本地,那么用客戶游標非但不提高性能,還會使性能下降。這時候,數據將被緩存兩次,數據庫一次,游標服務一次。

如果考慮應用的功能,客戶游標功能是很完善的,它能支持某些數據庫不能完成的操作( 視數據庫的情況而定 )。

4. 什幺是 DisConnected RecordSet ?

我們使用了客戶游標,就可以斷開與數據庫的連接,釋放 Connection 對象。這樣的結果集就是 DisConnected RecordSet。舉例說明:

Dim c As New ADODB.Connection
Dim r As New ADODB.Recordset
On Error GoTo handler
??
c.ConnectionString = connectStr
c.CursorLocation = adUseClient
c.Open
Set r.ActiveConnection = c
r.Open SqlText, , adOpenKeyset, adLockBatchOptimistic, -1
Set r.ActiveConnection = Nothing?? ' This disconnects the recordset.
c.Close
Set c = Nothing
......
......??
' Recordset is now in disconnected state; do something with it.
r.Close
Set r = Nothing
......


本文來自CSDN博客,轉載請標明出處: http://blog.csdn.net/Athoncj/archive/2006/12/25/1459816.aspx

什幺是數據庫游標


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲精品成人a在线 | 久久成人在线 | 日韩精品另类天天更新影院 | 久久精品免费观看 | swag国产在线| 麻豆一区二区三区在线观看 | 亚洲成综合| 九九视频免费在线 | 九九热这里都是精品 | 色色色爱| 99re6在线视频免费精品 | 成人免费观看高清在线毛片 | 91粉嫩萝控精品福利网站 | 国产精品免费aⅴ片在线观看 | 国产成人a大片大片在线播放 | 性欧美另类老妇高清 | 国产人成午夜免视频网站 | 国产亚洲精品自在线观看 | 91视频欧美 | 久久免费视频网站 | 久久99热这里只有精品高清 | 韩国亚洲伊人久久综合影院 | 国产精品久久现线拍久青草 | 久久亚洲精品一区二区三区浴池 | 成人性生交大片免费看午夜a | 在线看片不卡 | 四虎久久影院 | 久久福利| 四虎精品视频在线永久免费观看 | 国产在线精品香蕉综合网一区 | 一级片免| 黄色成人毛片 | 日本人又黄又爽免费视频 | 日日插天天干 | 国产精品久久久久久久成人午夜 | 波多野结衣中文字幕一区二区三区 | 国产在线观看一区精品 | 久久青草视频 | 亚洲欧美精品中文字幕 | 免费在线一级片 | 毛片一级视频 |