ADO連接數據庫通常有三種方法

ADO連接數據庫通常有三種方法
 【摘 要】ADO連接數據庫通常有三種方法:System DSN Connection,DSN-less Connection 和 OLE DB Connection,這是大家都很熟悉的,本文詳細介紹關於ADO連接數據庫的三種方法及性能比較的文章專題。

(注:三種方法的區別在於使用的是哪個關鍵字 - DSN,Driver,Data Source,Provider。UID,PWD 是 ODBC 的標記,User ID,Password 是 OLEDB 的標記。特別指出的是 Data Source 在 ODBC 標記中表示數據源,等同於 DSN,在 OLEDB 標記中表示服務器名或數據庫名。)

'System DSN Connection
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "DSN=your_dsn;UID=user_name;PWD=password;"
'或者用 OLEDB 標記
cnn.Open "Data Source=your_dsn;User ID=user_name;Password=password;"

'DSN-less Connection
'以SQL Server爲例
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "driver={SQL Server};server=server_name;uid=user_name;pwd=pwd;database=pubs"

'OLE DB Connection
'以SQL Server爲例
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open "provider=sqloledb;data source=server_name;initial catalog=pubs;user id=user_name;password=pwd;"

下面,我們討論一下它們各自的性能。

從本質上說,System DSN 和 DSN-less Connection 都是通過 ODBC 與數據庫進行連接的,它們之間區別不大(事實上也確實如此)。有很多人說 DSN-less Connection 要優於 System DSN Connection,對這一點我不反對。(是不是前後有些矛盾,剛說它們區別不大,現在又......)我曾經分別對這兩種連接測試過,但是失敗了。因爲我的測試數據沒有規律,根本說明不了問題(或許用假設檢驗能比較兩者的性能,不過得算死)。於是我得出了結論:沒有結論!後來在網上看到一篇文章 System DSN or DSN-less Connection? 算是有了答案。

結論就是(這是原文):

These tests showed that DSN-less connection were slightly faster than System DSN Connections.The increase in performance was nothing monumental;the greatest performance boost was mere 13% faster with 64 concurrent requests.For one,two,or four concurrent requests,there was virtually no performance improvement.In fact,no noticeable improvement is seen in a DSN-less connection over a System DSN until there are 10 or more concurrent connections.

爲什麼?因爲 System DSN 在連接時要讀註冊表。

現在只有OLE DB沒有說了(打字真累)。OLE DB 比 ODBC 要高效的多。

根本不用測試,這個結論是顯而易見的。如果你還有些懷疑,建議去看看連接池(Connection Pooling)介紹 那裏有 MDAC framework 的圖示,從圖中可以看出,經 ODBC 連接是 ADO-->OLE DB-->ODBC Provider-->ODBC-->driver-->數據庫;經 OLE DB 是 ADO-->OLE DB-->DB Provider-->數據庫。哪個更直接?當然是 OLE DB!

OLE DB 連接數據庫比 ODBC 快,檢索數據比 ODBC 快。所以,我建議每一個在網上安家的人:用OLE DB!

Set cnn = Server.CreateObject("ADODB.Connection")
'Connection string for SQL Server
cnn.Open "Provider=SQLOLEDB;Data Source=srvName;Initial Catalog=DBname;User ID=user_id;Password=yourPassword;"

'for Access
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_path"

連接數據庫就是這麼容易!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章