六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

3天學好ADO

[摘要]第一天在《十天學會ASP》教程中,我粗粗介紹了一下ADO,實際上可以說是點到為止。只說了Connection對象中的Open方法建立到數據源的物理連接,使用 Close 方法將其斷開;Recordset 對象中的使用 AddNew、Update 和 Delete 方法所做的更改,在最后分頁中提到了...

第一天在《十天學會ASP》教程中,我粗粗介紹了一下ADO,實際上可以說是點到為止。只說了Connection對象中的Open方法建立到數據源的物理連接,使用 Close 方法將其斷開;Recordset 對象中的使用 AddNew、Update 和 Delete 方法所做的更改,在最后分頁中提到了Recordset 對象中AbsolutePage和RecordCount屬性。在這里我想有必要再較系統說一下ADO的各種對象的方法、屬性。畢竟ADO不僅應用在ASP中,VB,VC都可以用到。在這十天中我想主要提到的對象是:
Connection對象(代表打開的、與數據源的連接。)
RecordSet對象(代表來自基本表或命令執行結果的記錄的全集。)
至于和存儲過程密切相關的Parameter對象和Command對象會在以后的教程中詳細說。
先來說一下Connection對象的方法:
1、Open方法
connection.Open ConnectionString, UserID, Password, OptionsConnectionString   可選,字符串,包含連接信息。
UserID   可選,字符串,包含建立連接時所使用用戶名。
Password   可選,字符串,包含建立連接時所使用密碼。
Options   可選,ConnectOptionEnum 值。決定該方法是在連接建立之后(異步)還是連接建立之前(同步)返回。可以是如下某個常量:
adConnectUnspecified (默認)同步打開連接。
adAsyncConnect 異步打開連接。
2、Execute方法
connection.Execute CommandText, RecordsAffectedCommandText    字符串,包含要執行的 SQL 語句、表名、存儲過程或特定提供者的文本。RecordsAffected    可選,長整型變量,提供者向其返回操作所影響的記錄數目。
3、Close方法
connection.Close
使用 Close 方法可關閉 Connection 對象以便釋放所有關聯的系統資源。
需要注意的是:
(1)關閉對象并非將它從內存中刪除,可以更改它的屬性設置并且在此后再次打開。
(2)要將對象從內存中完全刪除,可將對象變量設置為 Nothing。
(3)使用 Close 方法關閉 Connection 對象的同時,也將關閉與連接相關聯的任何活動 Recordset 對象。
(4)關閉 Connection 對象后,調用任何需要打開與對數據源連接的方法都將產生錯誤。以上三種方法,大家都應該是熟知的。
下面說一下Connection對象的屬性,簡單提一下。
1、Provider屬性
使用 Provider 屬性指定 OLE DB 提供者。
需要注意的是:調用 Open 方法時在多處指定提供者可能會產生無法預料的后果。
2、ConnectionString 屬性
包含用于建立連接數據源的信息。
3、ConnectionTimeout 屬性
指示在終止嘗試和產生錯誤前建立連接期間所等待的時間,等待連接打開的時間的長整型值(單位為秒)。默認值為 15。
4、Mode 屬性
指示在 Connection 中修改數據的可用權限。
常量 說明
AdModeUnknown 默認值。表明權限尚未設置或無法確定。
AdModeRead 表明權限為只讀。
AdModeWrite 表明權限為只寫。
AdModeReadWrite 表明權限為讀/寫。
AdModeShareDenyRead 防止其他用戶使用讀權限打開連接。
AdModeShareDenyWrite 防止其他用戶使用寫權限打開連接。
AdModeShareExclusive 防止其他用戶打開連接。
AdModeShareDenyNone 防止其他用戶使用任何權限打開連接。
需要注意的是:
使用 Mode 屬性可設置或返回當前連接上提供者正在使用的訪問權限。Mode 屬性只能在關閉 Connection 對象時才能夠設置。今天說到這里,明天說一下RecordSet對象的屬性。2.今天說一下Recordset 對象的屬性
1、CursorType 屬性
AdOpenForwardOnly: 僅向前游標,默認值。除了只能在記錄中向前滾動外,與靜態游標相同。當只需要在記錄集中單向移動時,使用它可提高性能。(顧名思義,這種游標只能向前移動。然而,由于這種游標功能有限,將它用于系統資源時是非常有效的。)
AdOpenKeyset: 鍵集游標。盡管從您的記錄集不能訪問其他用戶刪除的記錄,但除無法查看其他用戶添加的記錄外,鍵集游標與動態游標相似。仍然可以看見其他用戶更改的數據。(KeySet游標允許你看見自它創建起其他用戶所做的修改,然而你卻不能看到其他用戶增加或刪除的記錄。)
AdOpenDynamic :動態游標。可以看見其他用戶所作的添加、更改和刪除。允許在記錄集中進行所有類型的移動,但不包括提供者不支持的書簽操作。(此類型的游標功能強大同時也是耗費系統資源最多的游標。Dynamic游標可以看到他們保存記錄集合的所有變化。使用Dynamic游標的用戶可以看到其他用戶所做的編輯、增加、刪除。如果數據提供者允許這種類型的游標,那么它是通過每隔一段時間從數據源重取數據來支持這種可視性的。毫無疑問這會需要很多的資源。 )
AdOpenStatic:靜態游標。可以用來查找數據或生成報告的記錄集合的靜態副本。另外,對其他用戶所作的添加、更改或刪除不可見。(Static類游標只是數據的一幅快照。這就是說,它無法看到自它創建以后其他用戶對RecordSet所做的修改。采用這類游標你可以向前和向后航行。由于其功能簡單,資源的需求比Dynamic要小! )
需要注意的是:一旦打開RecordSet,你就無法改變CursorType屬性。但是,如果你首先關閉RecordSet,改變CursorType屬性,然后重新打開RecordSet,那么你仍可以有效地改變游標的類型!

2、LockType 屬性
在任何同時可被多用戶修改的數據庫應用程序中,你必須處理可能發生的多個用戶同時對同一條記錄進行操作時的情況。當這種情況出現時,數據的完整性就會受到威脅,這是因為一個用戶可能會在不自覺地在保存自己所做的修改時覆蓋他人的修改。到時候你會覺得自己好象是沒有做事。為了處理這種情況。ADO允許你在對RecordSet對象進行更新時決定并發事件控制的類型,當一個用戶編輯時,如何由他對記錄進行鎖定。這就是由LockType屬性所決定的。這個屬性有四個值:
adLockReadonly:默認值,只讀。無法更改數據。(這是RecodSet的默認值,如果你把鎖定的方式設為該值,那么你將不能更新 Recordset。)
adLockPessimistic:保守式記錄鎖定(逐條)。提供者執行必要的操作確保成功編輯記錄,通常采用編輯時立即鎖定數據源的記錄的方式。(如果設置為此類鎖定,記錄被鎖定,且只有在編輯開始到將記錄更新的提交給數據提供者這段時間內進行編輯的用戶才可以訪問! )
adLockOptimistic:開放式記錄鎖定(逐條)。提供者使用開放式鎖定,只在調用 Update 方法時鎖定記錄。(只有在將數據提交給數據提供者的那一瞬間才把記錄鎖定。)
adlockBatchOptimistic:開放式批更新。用于與立即更新模式相反的批更新模式。(設定為這種類型的鎖定制式將被稱為批量更新模式的RecordSet。 可以加快更新RecordSet修改數據的速度,但因為同時更新多個記錄,它也會惡化與并發訪問相關的問題! )

3、AbsolutePage 屬性
AbsolutePage屬性設定當前記錄的位置是位于哪一頁的頁數編號;使用PageSize屬性將Recordset對象分割為邏輯上的頁數,每一頁的記錄數為PageSize(除了最后一頁可能會有少于PageSize的記錄數)。這里必須注意并不是所有的數據提供者都支持此項屬性,因此使用時要小心。
與AbsolutePosition屬性相同,AbsolutePage屬性是以1為起始的,若當前記錄為Recordset的第一行記錄,AbsolutePage為1。可以設定AbsolutePage屬性,以移動到一個指定頁的第一行記錄位置。
4、AbsolutePosition屬性
若您需要確定目前指標在RecordSet中的位置,您可以用AbsolutePosition屬性。
AbsolutePosition屬性的數值為目前指標相對於第一筆的位置,由1算起,即第一筆的AbsolutePosition為1。
注意,在存取RecordSet時,無法保證RecordSet每次都以同樣的順序出現。
若要啟用AbsolutePosition,必須先設定為使用用戶端cursor(指針):rs.CursorLocation=3

5、PageCount屬性
使用PageCount屬性,決定Recordset對象包括多少“頁”的數據。這里的“頁”是數據記錄的集合,大小等于PageSize屬性的設定,即使最后一頁的記錄數比PageSize的值少,最后一頁也算是PageCount的一頁。必須注意也并不是所有的數據提供者都支持此項屬性。

6、PageSize屬性
PageSize屬性是決定ADO存取數據庫時如何分頁顯示的關鍵,使用它就可以決定多少記錄組成一個邏輯上的“一頁”。設定并建立一個頁的大小,從而允許使用AbsolutePage屬性移到其它邏輯頁的第一條記錄。PageSize屬性能隨時被設定。

7、RecordCount屬性
這也是一個非常常用和重要的屬性,我們常用RecordCount屬性來找出一個Recordset對象包括多少條記錄。使用 RecordCount 屬性可確定Recordset 對象中記錄的數目。ADO 無法確定記錄數時,或者如果提供者或游標類型不支持 RecordCount,則該屬性返回 –1。讀已關閉的 Recordset 上的 RecordCount 屬性將產生錯誤。Recordset 對象的游標類型會影響是否能夠確定記錄的數目。對僅向前游標,RecordCount 屬性將返回 -1,對靜態或鍵集游標返回實際計數,對動態游標取決于數據源返回 -1 或實際計數。

8、BOF與EOF屬性
通常我們在ASP程序中編寫代碼來檢驗BOF與EOF屬性,從而得知目前指標所指向的RecordSet的位置,使用BOF與EOF屬性,可以得知一個Recordset對象是否包含有記錄或者得知移動記錄行是否已經超出該Recordset對象的范圍。
若當前記錄的位置是在一個Recordset對象第一行記錄之前時,BOF屬性返回true,反之則返回false。
若當前記錄的位置是在一個Recordset對象最后一行記錄之后時,EOF屬性返回true,反之則返回false。
(BOF與EOF都為True表示在RecordSet里沒有任何記錄。)

9、Filter 屬性
為 Recordset 中的數據指定篩選條件,使用 Filter 屬性可選擇性地屏蔽 Recordset 對象中的記錄,已篩選的 Recordset 將成為當前游標。這將影響基于當前游標返回值的其他屬性,如 AbsolutePosition、AbsolutePage、RecordCount 和 PageCount,因為將 Filter 屬性設置為特定值可將當前記錄移動到滿足新值的第一個記錄。
這屬性我認為相當有用處,有的時候我們打開了Recordset進行了某些判斷以后我們還想過濾記錄也就是重新調整 sql 語句,難道我們關閉Recordset再用新的SQL語句打開?不是,我們用Filter屬性進行過濾,比如說
rs.open exec,conn,1,1
if .... then rs.filter="name='xxx'"
而不是
rs.open exec,conn,1,1
if ... then
rs.close
exec=exec&" where name='xxx'"
rs.open exec,conn,1,1
end if
實際上再很多地方不得不用到Filter,在以后的ASP技巧中會說到,大家也可以想一下。
明天繼續說Recordset對象的方法。3.今天來說一下Recordset對象的一些方法。
1、AddNew 方法
創建可更新 Recordset 對象的新記錄。
recordset.AddNew FieldList, Values
FieldList   可選。新記錄中字段的單個名稱、一組名稱或序號位置。
Values   可選。新記錄中字段的單個或一組值。如果 Fields 是數組,那么 Values 也必須是有相同成員數的數組,否則將發生錯誤。字段名稱的次序必須與每個數組中的字段值的次序相匹配。我們一般是
rs.addnew
rs("xx")=xx
rs("xx")=xx
rs.update
需要注意的是在立即更新模式(調用 Update 方法時提供者會立即將更改寫入基本數據源)下,調用不帶參數的 AddNew 方法可將 EditMode 屬性設置為 adEditAdd。提供者將任何字段值的更改緩存在本地。調用 Update 方法可將新記錄傳遞到數據庫并將 EditMode 屬性重置為 adEditNone。如果傳送了 Fields 和 Values 參數,ADO 則立即將新記錄傳遞到數據庫(無須調用 Update),且 EditMode 屬性值沒有改變 (adEditNone)。
可能大家會問在ASP中使用ADO的AddNew方法和直接使用“Insert into...”語句有和不同?那種方式更好?答:ADO的AddNew方法只是將“Insert into ”語句封裝了起來,所以,當對大量數據進行操作的時候,直接使用SQL語句將會大大加快存取數據的速度,因為他減少了ADO的“翻譯”時間。2、Delete 方法
刪除當前記錄或記錄組。
recordset.Delete AffectRecordsAffectRecords   AffectEnum 值,確定 Delete 方法所影響的記錄數目,該值可以是下列常量之一。
AdAffectCurrent 默認。僅刪除當前記錄。
AdAffectGroup 刪除滿足當前 Filter 屬性設置的記錄。要使用該選項,必須將 Filter 屬性設置為有效的預定義常量之一。
adAffectAll 刪除所有記錄。
adAffectAllChapters 刪除所有子集記錄。
使用立即更新模式將在數據庫中進行立即刪除,否則記錄將標記為從緩存刪除,實際的刪除將在調用 Update 方法時進行。3、Update 方法
保存對 Recordset 對象的當前記錄所做的所有更改
recordset.Update Fields, Values
Fields   可選。變體型,代表單個名稱;或變體型數組,代表需要修改的字段(一個或多個)名稱及序號位置。
Values   可選。變體型,代表單個值;或變體型數組,代表新記錄中字段(單個或多個)值。
如果希望取消對當前記錄所做的任何更改或者放棄新添加的記錄,則必須調用 CancelUpdate 方法。4、CancelUpdate 方法
recordset.CancelUpdate
使用 CancelUpdate 方法可取消對當前記錄所作的任何更改或放棄新添加的記錄。在調用 Update 方法后將無法撤消對當前記錄或新記錄所做的更改,如果在調用 CancelUpdate 方法時添加新記錄,則調用 AddNew 之前的當前記錄將再次成為當前記錄。如果尚未更改當前記錄或添加新記錄,調用 CancelUpdate 方法將產生錯誤。5、Find 方法
搜索 Recordset 中滿足指定標準的記錄。如果滿足標準,則記錄集位置設置在找到的記錄上,否則位置將設置在記錄集的末尾。
Find (criteria, SkipRows, searchDirection, start)
criteria   字符串,包含指定用于搜索的列名、比較操作符和值的語句。
SkipRows    可選,長整型值,其默認值為零,它指定當前行或 start 書簽的位移以開始搜索。
searchDirection    可選的 SearchDirectionEnum 值,指定搜索應從當前行還是下一個有效行開始。其值可為 adSearchForward 或 adSearchBackward。搜索是在記錄集的開始還是末尾結束由 searchDirection 值決定。
start    可選,變體型書簽,用作搜索的開始位置。
criteria “比較操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”(不等于)或“like”(模式匹配)。 criteria 中的值可以是字符串、浮點數或者日期。字符串值以單引號分界(如“state = 'WA'”)。日期值以“#”(數字記號)分界(如“start_date > #7/22/97#”)。
需要注意的是find是不支持多字段。但是可以用filter實現。"name='abc'"AND "city='sh'" 是不允許的6、Move 方法
移動 Recordset 對象中當前記錄的位置
recordset.Move NumRecords, Start
NumRecords    帶符號長整型表達式,指定當前記錄位置移動的記錄數。
Start    可選,字符串或變體型,用于計算書簽。也可為下列值之一:
AdBookmarkCurrent 默認。從當前記錄開始。
AdBookmarkFirst 從首記錄開始。
AdBookmarkLast 從尾記錄開始。
需要注意的是:
(1)如果 NumRecords 參數大于零,則當前記錄位置將向前移動(向記錄集的末尾)。如果 NumRecords 小于零,則當前記錄位置向后移動(向記錄集的開始)。
(2)從空的 Recordset 對象調用 Move 方法將產生錯誤。
(3)如果 Move 調用將當前記錄位置移動到首記錄之前,則 ADO 將當前記錄放置在記錄集(BOF 為 True)的首記錄之前。在 BOF 屬性已經為 True 時試圖向后移動將產生錯誤;如果 Move 調用將當前記錄位置移動到尾記錄之后,則 ADO 將當前記錄放置在記錄集(EOF 為 True)的尾記錄之后。在 EOF 屬性已經為 True 時試圖向前移動將產生錯誤。7、MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法
在指定 Recordset 對象中移動到第一個、最后一個、下一個或前一個記錄并使該記錄成為當前記錄。
recordset.{MoveFirst MoveLast MoveNext MovePrevious}
需要注意的是:
(1)使用 MoveNext 方法將當前記錄向前移動一個記錄(向 Recordset 的底部)。如果最后一個記錄是當前記錄并且調用 MoveNext 方法,則 ADO 將當前記錄設置到 Recordset (EOF 為 True)的尾記錄之后。當 EOF 屬性已經為 True 時試圖向前移動將產生錯誤。
(2)使用 MovePrevious 方法將當前記錄位置向后移動一個記錄(向記錄集的頂部)。Recordset 對象必須支持向后游標移動;否則方法調用將產生錯誤。如果首記錄是當前記錄并且調用 MovePrevious 方法,則 ADO 將當前記錄設置在 Recordset (BOF 為 True)的首記錄之前。而 BOF 屬性為 True 時向后移動將產生錯誤。8、Clone 方法
創建與現有 Recordset 對象相同的復制 Recordset 對象。可選擇指定該副本為只讀。
Set rstDuplicate = rstOriginal.Clone
rstDuplicate   對象變量,標識正在創建的復制 Recordset 對象。
rstOriginal   對象變量,標識要被復制的 Recordset 對象。
使用 Clone 方法可創建多個 Recordset 對象副本,這對于希望在給定的記錄組中保留多個當前記錄十分有用。使用 Clone 方法比使用與初始定義相同的定義創建和打開新 Recordset 對象要有效得多。
也就是說
rs.open exec,conn,1,1
rs2.open exec,conn,1,1
應該這么改寫
rs.open exec,conn,1,1
rs2=rs.clone需要注意的是:
(1)新創建副本的當前記錄將設置為首記錄。
(2)關閉原始 Recordset 時并不關閉它的副本,而關閉某個副本也將不關閉原始 Recordset 或任何其他副本。9、Close 方法
關閉打開的對象及任何相關對象。
object.Close
需要注意的是:
(1)使用 Close 方法可關閉Recordset 對象以便釋放所有關聯的系統資源。關閉對象并非將它從內存中刪除,可以更改它的屬性設置并且在此后再次打開。要將對象從內存中完全刪除,可將對象變量設置為 Nothing。
(2)如果正在立即更新模式下進行編輯,調用 Close 方法將產生錯誤,應首先調用 Update 或 CancelUpdate 方法。
10、Open 方法,為什么最后說這個,因為前面的各項屬性方法沒有弄清楚,我們是不會理解CursorType參數的
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
Recordset對象可以通過Source屬性來連接Command對象。Source參數可以是一個Command對象名稱、一段SQL命令、一個指定的數據表名稱或是一個Stored Procedure。假如省略這個參數,系統則采用Recordset對象的Source屬性。ActiveConnectionRecordset對象可以通過ActiveConnection屬性來連接Connection對象。這里的ActiveConnection可以是一個Connection對象或是一串包含數據庫連接信息(ConnectionString)的字符串參數。CursorTypeRecordset對象Open方法的CursorType參數表示將以什么樣的游標類型啟動數據,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:--------------------------------------------------------------常數 常數值 說明-------------------------------------------------------------adOpenForwardOnly 0 缺省值,啟動一個只能向前移動的游標(Forward Only)。adOpenKeyset 1 啟動一個Keyset類型的游標。adOpenDynamic 2 啟動一個Dynamic類型的游標。adOpenStatic 3 啟動一個Static類型的游標。-------------------------------------------------------------以上幾個游標類型將直接影響到Recordset對象所有的屬性和方法,以下列表說明他們之間的區別。Recordset屬性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
AbsolutePage 不支持 不支持 可讀寫 可讀寫AbsolutePosition 不支持 不支持 可讀寫 可讀寫BOF 只讀 只讀 只讀 只讀CursorType 可讀寫 可讀寫 可讀寫 可讀寫EOF 只讀 只讀 只讀 只讀Filter 可讀寫 可讀寫 可讀寫 可讀寫LockType 可讀寫 可讀寫 可讀寫 可讀寫PageCount 不支持 不支持 只讀 只讀PageSize 可讀寫 可讀寫 可讀寫 可讀寫RecordCount 不支持 不支持 只讀 只讀AddNew 支持 支持 支持 支持CancelBatch 支持 支持 支持 支持CancelUpdate 支持 支持 支持 支持Close 支持 支持 支持 支持Delete 支持 支持 支持 支持Move 不支持 支持 支持 支持MoveFirst 支持 支持 支持 支持MoveLast 不支持 支持 支持 支持MoveNext 支持 支持 支持 支持MovePrevious 不支持 支持 支持 支持Open 支持 支持 支持 支持Update 支持 支持 支持 支持UpdateBatch 支持 支持 支持 支持--------------------------------------------------------------Recordset對象Open方法的LockType參數表示要采用的Lock類型,如果忽略這個參數,那么系統會以Recordset對象的LockType屬性為預設值。LockType參數包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:常數 常數值 說明--------------------------------------------------------------adLockReadOnly 1 缺省值,Recordset對象以只讀方式啟動,無法運行AddNew、Update及Delete等方法adLockPrssimistic 2 當數據源正在更新時,系統會暫時鎖住其他用戶的動作,以保持數據一致性。adLockOptimistic 3 當數據源正在更新時,系統并不會鎖住其他用戶的動作,其他用戶可以對數據進行增、刪、改的操作。adLockBatchOptimistic 4 當數據源正在更新時,其他用戶必須將CursorLocation屬性改為adUdeClientBatch才能對數據進行增、刪、改的操作。需要注意的是:
如果數據源沒有返回記錄,那么提供者將 BOF 和 EOF 屬性同時設置為 True,并且不定義當前記錄位置。如果游標類型允許,仍然可以將新數據添加到該空 Recordset 對象。


標簽:3天學好ADO 
主站蜘蛛池模板: 五月天婷婷网站 | 四虎影视库| 日韩欧美中文字幕在线视频 | 色聚网久久综合 | 欧美视频免费看 | 中文字幕在线有码高清视频 | 四虎影城库| 日日夜夜天天久久 | 亚洲视频www | 四虎精品影院在线观看视频 | 青娱乐在线视频观看 | 欧美亚洲国产精品久久第一页 | 天堂资源在线中文 | 全黄一级裸片视频免费区 | 星辰影院在线观看高清免费观看 | 日本黄页网| 青青久久精品国产 | 亚洲人成自拍网站在线观看忄 | 亚洲产在线精品第一站不卡 | 日韩日日日 | 亚洲一级大黄大色毛片 | 手机看片福利日韩 | 日本gogo亚洲高清大胆 | 四虎国产精品免费观看 | 日本精品不卡 | 日本一区二区三区在线 视频观看免费 | 日韩在线三级 | 亚洲第一看片 | 天天综合网天天综合色不卡 | 五月伊人婷婷 | 亚洲乱码国产一区网址 | 日日摸夜夜添夜夜爽免费视频 | 日韩高清在线观看 | 欧洲性大片xxxxx久久久 | 欧美一二三 | 亚洲精品视频在线观看免费 | 日本激情网址 | 青青草视频在线观看免费 | 亚洲人与黑人xxxx | 日韩欧美亚洲综合 | 日本视频免费在线观看 |