OLEDB? 這是什麼什麼玩藝兒? 也許你們中的許多人以前沒有聽說過. 要回答這個問題,我們先得回顧一下資料庫連接的曆史. 是英文(object linking and embedding database)的縮寫;
早期的資料庫連接是非常困難的. 每個資料庫的格式都不一樣,開發人員得對他們所開發的每種資料庫的底層API有深刻的瞭解. 因此,能處理各種各樣資料庫的通用的API就應運而生了. 也就是現在的ODBC(Open Database Connectivity), ODBC是人們在建立通用API的早期產物. 有許多種資料庫遵從了這種標準,被稱為ODBC相容的資料庫.
ODBC相容的資料庫包括Access, MS-SQL Server, Oracle, Informix等.
但ODBC並不是完美無缺的,它仍然含有大量的低級的調用,開發ODBC應用程式仍較困難. 開發人員不得不將大量的精力花在底層的資料庫通訊中,而不能專註於他們所要處理的資料. 後來微軟提出了一個解決方案: DAO(Data Access Objects). DAO的代碼看起來象這樣:
objItem.AddNew
objItem.Name = Chair
objItem.Price = 10
objItem.Update
你也許看過DAO的代碼. 後來DAO演變為RDO(Remote Data Objects, 為分散式資料庫體系設計), 再後來是ADO. 儘管它們都有各自的不足之處. 根據微軟的說法,ODBC提供了本地SQL資料的存取,DAO提供了進階的資料對象. DAO和RDO都需要資料以SQL(Structured Query Language)的格式儲存. 針對這些缺陷,微軟提出了OLEDB,一個基於COM的資料存放區對象,能提供對所有類型的資料的操作,甚至能在離線的情況下存取資料(比方說,你使用的是你的便攜機,你可以毫不費力地看到最後一次資料同步時的資料映像).
OLEDB位於ODBC層與應用程式之間. 在你的ASP頁面裡,ADO是位於OLEDB之上的應用程式. 你的ADO調用先被送到OLEDB,然後再交由ODBC處理. 你可以直接連接到OLEDB層,如果你這麼做了,你將看到伺服器端遊標(recordset的預設的遊標,也是最常用的遊標)效能的提升. 那我們該如何直接連接到OLEDB呢?
要想直接連到OLEDB層,你必須改變你的connection對象連接字串. 先用老辦法建立一個connectiong對象:
Dim objConn
Set objConn = Server.CreateObject(ADODB.Connection)
接下去,我們不用常規的類似DSN=pubs or DRIVER={MS SQL-
Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine的連接字串,而採用下面的連接字串:
objConn.ConnectionString = Provider=ProviderName; Data
Source=DatabaseSource; Initial Catalog=DatabaseName; User ID=UserID;
Password=Password
對於SQL:
ProviderName = SQLOLEDB
Data Source = Server Name
Initial Catalog = Database Name
對於Access:
ProviderName = Microsoft.Jet.OLEDB.3.51
Data Source = Full path to .MDB file
下面讓我們來看兩個例子,一個是針對Access的,還有一個是針對SQL的. 如果你的串連SQL的DSN-less串連串是這樣的:
DRIVER={MS SQL-Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine
那麼直接連接到OLEDB的連接字串應該是這樣的:
Provider=SQLOLEDB; Data Source=myMachine; Initial Catalog=pubs; User
ID=sa; Password=
讓我們來看看Access,如果你的Access的連接字串是:
DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:\inetpub\wwwroot\users.mdb
那麼直接連接到OLEDB的連接字串應該是這樣的:
Provider=Microsoft.Jet.OLEDB.3.51; Data
Source=c:\inetpub\wwwroot\users.mdb
就是這麼簡單,挺棒的吧?
這很重要嗎?
現在你也許對為什麼要學習這種新的資料庫連接方法感到有些兒迷惑,為什麼不走標準的DSN-less/System DSN路子呢? 讓我來告訴你為什麼. 據Wrox出的ADO 2.0
Programmer's Reference一書中的測試,用OLEDB串連而不是DSN或DSN-less的串連會得到的效能提升如下:
效能比較
SQL Access
OLEDB DSN OLEDB DSN
Connection Times: 18 82 Connection Times: 62 99
Iterating through 1,000 Records Times: 2900 5400 Iterating through 1,000 Records Times: 100 950
源地址: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1477560