ADO技巧精華10則

來源:互聯網
上載者:User
ado|技巧|精華 我使用ActiveX Data Object(ADO)是從1.5版本開始,那已經是一個非常古老的版本了。現在的版本中,許多東西都發生了變化。從每一次版本升級中我都學到許多新的東西。這些東西你不能全部從書本上找到,或者至少可以說,不能從一個地方找到。

  我在這裡精心選擇和總結了這些ADO開發要點和技巧。其中有些問題可能就是你一直念念不忘的問題;有些是你從來不曾瞭解的技術;還有一些只是分門別類地展示ADO開發的知識精華。
一、共用連線物件
  把連接字串傳遞給Command、Recordset或者Record對象時,每次你都是在隱含地命令ADO建立一個Connection對象:
Dim rec1 As ADODB.Record
Dim rec2 As ADODB.Record
Dim rec3 As ADODB.Record

Set rec1 = New ADODB.Record
rec1.Open "localstart.asp", "URL=http://localhost/"
Set rec2 = New ADODB.Record
rec2.Open "global.asa", "URL=http://localhost/"
Set rec3 = New ADODB.Record
rec3.Open "iisstart.asp", "URL=http://localhost/"
' 執行一些操作
rec1.Close
rec2.Close
rec3.Close

Set rec1 = Nothing
Set rec2 = Nothing
Set rec3 = Nothing
  為了節省資源,你應該先建立一個Connection對象,然後把它傳遞給所有要求活動串連的對象。也就是說,上面的代碼應該改成下面這種形式:
Dim con As ADODB.Connection
Dim rec1 As ADODB.Record
Dim rec2 As ADODB.Record
Dim rec3 As ADODB.Record
Set con = New ADODB.Connection
con.Open "URL=http://localhost/"
Set rec1 = New ADODB.Record
rec1.Open "localstart.asp", con
Set rec2 = New ADODB.Record
rec2.Open "global.asa", con
Set rec3 = New ADODB.Record
rec3.Open "iisstart.asp", con
' 執行一些操作'
rec1.Close
rec2.Close
rec3.Close
con.Close
Set rec1 = Nothing
Set rec2 = Nothing
Set rec3 = Nothing
Set con = Nothing
二、讀取ConnectionString屬性
  從任何已經開啟的Connection對象中,包括由Recordset、Command、或者Record對象的ActiveConnection屬性返回的Connection對象,你總是可以讀取到ConnectionString屬性。
Dim com As ADODB.Command
Dim rst As ADODB.Recordset
Set com = New ADODB.Command
com.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=NWind.mdb;"
com.CommandText = "SELECT * FROM Customers"
Set rst = com.Execute
MsgBox com.ActiveConnection.ConnectionString
rst.Close
Set rst = Nothing
Set com = Nothing
  上述代碼運行時,你將從訊息框看到如下輸出:
Provider=Microsoft.Jet.OLEDB.4.0;
Password="";
User ID=Admin;
Data Source=NWind.mdb;
Mode=Share Deny None;
Extended Properties="";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Database Password="";
Jet OLEDB:Engine Type=4;
Jet OLEDB:Database Locking Mode=0;
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False
  現在你就可以分析這個字串,找出有關該串連的特定資訊,比如當資料庫被壓縮時它是否會被加密(Jet OLEDB:Encrypt Database屬性)。
三、使用動態屬性
  Connection對象的Properties集合可用來設定供應商特有的選項,比如SQL Server的OLE DB驅動程式的Prompt動態屬性。
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Provider = "SQLOLEDB"
con.Properties("Prompt") = adPromptAlways
con.Open
' 提示使用者選擇資料庫'
con.Close
Set con = Nothing
  上述代碼運行時,使用者將看到一個對話方塊,這個對話方塊允許使用者選擇要登入到哪一個資料庫。
四、明智地選擇遊標位置
  選擇遊標的位置時,你必須考慮對於當前串連來說哪些服務比較重要。
  如果資料提供者的服務正是你所需要的,你應該使用伺服器端遊標。這些服務是資料來源驅動程式提供的服務,它們通常具有非常好的延展性。另外,通過保留伺服器端遊標,你無需象使用用戶端資料指標那樣總是把全部的資料發送到用戶端。
  另一方面,本地遊標服務,例如Microsoft資料形狀服務for OLE DB,能夠提供一些用戶端資料指標特有的服務。要讓這些服務能夠起作用,資料必鬚髮送到本地機器上,正如資料形狀服務所要求的一樣。
  你可以用Connection.CursorLocation屬性設定遊標的位置,但選擇應該明智、謹慎。
五、明智地選擇遊標類型
  選擇遊標的類型與選擇遊標的位置同樣重要。遊標共有四種類型,每一種類型都有各自的優點和缺點。
  Static遊標(靜態資料指標)提供了資料在給定時刻的一個快照。在這種類型的遊標中,資料改動(包括其他使用者的資料增加或者刪除操作)總是不可見。static遊標用來製作報表很理想,因為製作報表需要有資料的一個一致的、不會變化的視圖,但static遊標不一定速度最快。由於資料的改變不會顯示出來,對於每一個使用static遊標的串連,服務提供者必須分別為它建立和維護一份給定時刻的資料副本。
  Forward Only遊標(只能向前的遊標)與靜態資料指標基本相同,不同之處在於你只能向前移動訪問資料,但不能向後。與Static遊標相比,這個限制有利於提高效能,但它仍舊要求資料來源維護一個資料的臨時副本,使得其他使用者對資料的改動不會影響你的資料。
  Dynamic遊標(動態資料指標)允許你看到其他使用者對資料的修改和刪除操作,而且你可以在整個記錄集之內自由地移動。與Static和Forward Only遊標不同,Dynamic遊標不要求資料來源維護一份資料的靜態映像,因此Dynamic遊標要比前兩種遊標快。
  最後一種遊標類型是Keyset遊標(鍵集遊標)。Keyset遊標與Dynamic遊標非常相似,不同之處在於你不能看到其他使用者新增的記錄。在Keyset遊標中,其他使用者刪除的記錄也將不可訪問。和Dynamic遊標一樣,Keyset遊標中你也可以看到其他使用者的修改。Keyset遊標可能要比Dynamic遊標快,這是因為Keyset遊標不需要經常地去檢查是否有新記錄加入、是否有記錄被刪除(因為新增的記錄不可見,被刪除的記錄變成不可訪問)。
  考慮每一個理由,然後再選擇適合你的遊標類型。
六、手工構造參數

  當效能因素很重要時,請手工定義參數:
Dim con As ADODB.Connection
Dim com As ADODB.Command
Dim par As ADODB.Parameter
Dim rs



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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