OLEdb連線簡介

2021-09-30 02:34:13 字數 2744 閱讀 2454

有許多種辦法可以連上乙個資料庫. 你可以用system dsn, dsn-less連線或是本地的oledb provider. oledb? 這是什麼什麼玩藝兒? 也許你們中的許多人以前沒有聽說過. 要回答這個問題,我們先得回顧一下資料庫連線的歷史.

早期的資料庫連線是非常困難的. 每個資料庫的格式都不一樣,開發者得對他們所開發的每種資料庫的底層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=;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=;uid=sa;pwd=;database=pubs;server=mymachine

那麼直接連線到oledb的連線字串應該是這樣的:

provider=sqloledb; data source=mymachine; initial catalog=pubs; user

id=sa; password=

讓我們來看看access,如果你的access的連線字串是:

driver=;

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

我希望這篇文章能對你有點兒幫助,我相信你會對你的連線sql及access資料庫的方法做一些小小的改進的.

OLEDB 連線 Excel 丟失資料問題

在工作發現用oledb去連線excel時會發現有些行的字段會丟失尾部的資料。上網查詢,發現原因是因為oledb缺省會以前8行的資料為基礎判斷,所以如果前面的資料長度不夠長,會引起後面的資料會丟失。解決方法 現在只能以修改登錄檔的方法解決。64位系統 hkey local machine softwa...

PB 通過ODBC或OLEDB連線ACCESS

pb 通過odbc或oledb連線access 1.odbc 1.1 建立odbc資料來源 1.2 profile sqlca.dbms odbc sqlca.autocommit false sqlca.dbparm connectstring dsn xtktv uid admin pwd 00...

用oledb連線資料庫

odbc,oledb,ado,adox的關係 odbc 曾經的資料庫通訊標準 oledb 在一切物件化的趨勢下,ms打算用它取代odbc.oledb分兩種 直接的oledb和面向odbc的oledb,後者架構在odbc上,這樣沒有自己的oledb提供者的資料庫也可以使用oledb的特點了。ado 其...