Sql中游標和加鎖的問題 (轉)
Sql中游標和加鎖的問題 (轉)[@more@]
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
'加鎖型別
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
>%
%
%
%
%
遊標使用時是比較靈活的,它有時用來描述一個記錄集,有時又是用來描述當前記錄集
中某一條記錄的指標。遊標主要是用來建立一個關係中行/列關係的一種SQL可利
用的訪問格式。與遊標有關係的技術術語還有一個叫Bookmark的。如果你選擇的遊標方式
支援Bookmarks。資料庫將提供有關記錄數目的強大功能。
在上面寫出的那麼多遊標方式中,adOpenDynamic是沒有太的用處的,雖然它提供實時顯示
資料庫中的記錄的所有操作的功能,但是因為並不是所有的資料庫都支援該遊標方式,
沒有移植性的遊標方式對當前錯綜複雜的資料庫來說真是用處不大。
在實際的中,我相信大家使用得最頻繁的是adOpenStatic方式,當然這種方式的缺點是
不能夠就、實時反應出資料庫中內容改變時的狀況。如果要想看到資料庫被其它改變的
狀況,可使用adOpenKeyse方式(但是它只能夠反應出被編輯的改變情況,也就是說不能夠
反映出新增和刪除記錄的改變情況。)
其實上面的內容大家一般都可以在的技術參考資料中找到,下面來說說在使用這些遊標
方式和加鎖方式時要注意到的問題。
1。首先要注意到的是這兩種方式在混合使用時的問題,就是說你同時設定遊標方式和加鎖方式。
除非你是在使用Access資料庫,一般而言當你混合使用時是並不能夠得到你預期想要的
遊標方式和加鎖方式的。例如,如果你同時將遊標設定為adOpenStatic方式,而將加鎖設定為
adLockOptimistic,你將得不到adOpenStatic方式的遊標,你這時使用的遊標方式將是
adOpenKeyset,也就是說你使用ADO的話,它將返回adOpenKeyset的遊標。
2。其次,遊標和加鎖的混合使用還會導致ADO返回的不是你想要的加鎖方式,ADO會改變你的加鎖
方式。例如,在預設狀態下游標方式是adOpenForwardOnly,在使用這種遊標方式的同時如果
你使用的加鎖方式為-1(就是讓資料來源來判斷加鎖方式)或則adLockReadOnly,那麼這種混合方式
基本上不支援RecordSet的任何方法,也就是說RecordSet的任何方法將返回False
(你的recordcount,absoultpage,addnew,delete,update等都會返回-1,-1就是表示不支援該屬性),
但是這時如果你使用的是adOpenForwardOnly遊標方式和其它的加鎖方式混合,它反而
會支援填加,刪除和更新。
'遊標型別
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
'加鎖型別
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
>%
%
%
%
%
遊標使用時是比較靈活的,它有時用來描述一個記錄集,有時又是用來描述當前記錄集
中某一條記錄的指標。遊標主要是用來建立一個關係中行/列關係的一種SQL可利
用的訪問格式。與遊標有關係的技術術語還有一個叫Bookmark的。如果你選擇的遊標方式
支援Bookmarks。資料庫將提供有關記錄數目的強大功能。
在上面寫出的那麼多遊標方式中,adOpenDynamic是沒有太的用處的,雖然它提供實時顯示
資料庫中的記錄的所有操作的功能,但是因為並不是所有的資料庫都支援該遊標方式,
沒有移植性的遊標方式對當前錯綜複雜的資料庫來說真是用處不大。
在實際的中,我相信大家使用得最頻繁的是adOpenStatic方式,當然這種方式的缺點是
不能夠就、實時反應出資料庫中內容改變時的狀況。如果要想看到資料庫被其它改變的
狀況,可使用adOpenKeyse方式(但是它只能夠反應出被編輯的改變情況,也就是說不能夠
反映出新增和刪除記錄的改變情況。)
其實上面的內容大家一般都可以在的技術參考資料中找到,下面來說說在使用這些遊標
方式和加鎖方式時要注意到的問題。
1。首先要注意到的是這兩種方式在混合使用時的問題,就是說你同時設定遊標方式和加鎖方式。
除非你是在使用Access資料庫,一般而言當你混合使用時是並不能夠得到你預期想要的
遊標方式和加鎖方式的。例如,如果你同時將遊標設定為adOpenStatic方式,而將加鎖設定為
adLockOptimistic,你將得不到adOpenStatic方式的遊標,你這時使用的遊標方式將是
adOpenKeyset,也就是說你使用ADO的話,它將返回adOpenKeyset的遊標。
2。其次,遊標和加鎖的混合使用還會導致ADO返回的不是你想要的加鎖方式,ADO會改變你的加鎖
方式。例如,在預設狀態下游標方式是adOpenForwardOnly,在使用這種遊標方式的同時如果
你使用的加鎖方式為-1(就是讓資料來源來判斷加鎖方式)或則adLockReadOnly,那麼這種混合方式
基本上不支援RecordSet的任何方法,也就是說RecordSet的任何方法將返回False
(你的recordcount,absoultpage,addnew,delete,update等都會返回-1,-1就是表示不支援該屬性),
但是這時如果你使用的是adOpenForwardOnly遊標方式和其它的加鎖方式混合,它反而
會支援填加,刪除和更新。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988219/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JBuilder Editor中游標不能正確定位問題的解決 (轉)UI
- SQL SERVER中游標原理和使用方法SQLServer
- sql server死鎖的問題SQLServer
- SQL Server 2005鎖的問題SQLServer
- 有關Jbuilder9問題求助--編輯器中游標定位不到最後UI
- 解決SQL Server 2005中鎖的問題SQLServer
- 通過 sysprocesses 解決Sql死鎖問題SQL
- 標準SQL寫法的重複列問題SQL
- 關於sql語句的遊標共享問題SQL
- oracle利用中游標取資料庫的結果集應用例項(轉)Oracle資料庫
- 解決SQL2005死鎖問題SQL
- 【SQL*Plus】處理 SQL*Plus的標頭無法顯示問題SQL
- JBuilder的游標不能正常工作的問題! (轉)UI
- 關於 a 標籤跳轉問題
- oracle 解鎖的問題Oracle
- SQLServer 如何收集資料以排除 SQL 死鎖問題SQLServer
- 解析SQL Server中行轉列問題SQLServer
- SQL行轉列統計問題SQL
- 查詢session被鎖的sql(轉)SessionSQL
- RAC 鎖管理與鎖問題的定位(二)
- RAC 鎖管理與鎖問題的定位(一)
- Slave SQL執行緒與PXB FTWRL死鎖問題分析SQL執行緒
- 測試MySQL鎖的問題MySql
- oracle 鎖問題的解決Oracle
- java鎖的問題速通Java
- MySQL中游標使用以及讀取文字資料MySql
- synchronized鎖重入問題synchronized
- MySQL死鎖問題MySql
- oracle鎖表問題Oracle
- SQL Server技術問題之遊標優缺點SQLServer
- [SQL]關於Concatenated Groupings的問題[轉載]SQL
- 解決Sql Server警報的疑難問題(轉)SQLServer
- 解決一個.NET聯接SQL的問題 (轉)SQL
- 捕獲問題SQL解決過度CPU消耗問題-- 轉載SQL
- javamail的標記問題JavaAI
- SQL Server 2000 死鎖(dead lock) 問題解決SQLServer
- golang中的鎖競爭問題Golang
- 多執行緒鎖的問題執行緒