關於資料來源串連提供者和資料來源串連

來源:互聯網
上載者:User
資料|資料來源 我是初學ASP的,深入一點後,讓我困惑不已的就是資料庫的串連,我經常看到對於同一個Microsoft Access資料庫使用兩種方式,或是三種,甚至四種方式的串連,最讓我不能理解的是這兩種:

<%
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=databasename;"
%>



<%
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DBQ=databasename; Driver=Microsoft Access Driver (*.MDB);"
%>


為什麼是這樣的呢?帶著這樣的問題,我開始系統地來看資料來源串連的問題。讓我有所頓悟的是xmxoxo曾給我們的一個ADO結構圖,還有便是我使用了OLE DB資料連線檔案(.udl)檔案來建立資料來源串連。
ADO的結構圖:


下面我就談談我對資料來源串連的總的看法。

首先要肯定的是這個ADO結構圖,ADO的模式是必須通過OLE DB介面來訪問所有的資料來源,也就是說,ADO期望所有的資料來源都提供面向OLE DB介面的驅動。

可眾所周知,當前我們使用的所有的資料庫管理系統--DBMS實際上都可以通過 ODBC進行互訪,這是因為ODBC提供了各類資料來源的驅動。 然而ADO訪問資料來源的統一介面卻是個OLE DB介面,這樣一來,儘管有越來越多資料庫廠商開始也提供OLE DB 介面,比如SQL Server、Oracle以及Microsoft Access(Microsoft Jet 資料庫引擎)等等,但仍有一些資料來源無法以這種方式提供,仍然需要藉助ODBC驅動向OLE DB提供。這樣的話,OLE DB便定義了一個嵌入使用ODBC驅動的介面,就象是ODBC驅動也象其他資料庫驅動的提供者一樣插在了OLE DB型號的插座上。給ODBC這個介面的名字(即OLE DB提供者)便是Microsoft OLE DB Provider for ODBC drivers,是ADO預設的提供者。關鍵字Provider的值為MSDASQL,可以省略不寫,因而我們在建立資料來源串連時,沒看到provider的話,那說明,肯定是ODBC提供的驅動。

怎麼樣?困惑我很久的兩個名詞OLE DB和ODBC我總算是看清楚了。
實際上簡單地說,這兩個東東不能等同起來,因為不是一個範疇。ODBC是樂善好施的恩主,是為各種資料來源提供驅動的提供者,而OLE DB根本就是個獨裁者,它要所有的資料來源都向它屈服,提供符合它標準的驅動。

接下來我們用實踐來證明這一點,我們的ODBC的確是受控於OLE DB的。

看書上寫的通常是建立資料庫通常有“DSN方法及非DSN方法”,這種說法只能是針對ODBC驅動而言。對OLE DB來說只有“UDL方式”及“非UDL方式”,因為回頭我們便可以看見“DSN方法及非DSN方法”,只不過是OLE DB下的“非UDL方式”。

我們先來看看ADO建立資料來源串連的對象Connection的用法。

從ADO參考上大家可以看到Connection對象有很多屬性,我們只談論它的兩個屬性,一個是Provider,另一個便是connectionString,這兩個關係到我們資料來源的最終串連。

下面這段是關於Provider屬性,拷貝於ADO參考。
使用 Provider 屬性可設定或返回串連提供者的名稱。也可以通過 ConnectionString 屬性的內容或 Open方法的 ConnectionString 參數設定該屬性。但是,調用 Open 方法時在多處指定提供者可能會產生無法預料的後果。
如果沒有指定提供者,該屬性將預設為 MSDASQL (Microsoft OLE DB Provider for ODBC )。

同樣大家也可以在參考中找到這麼一點。使用 ConnectionString 屬性,是通過詳細連接字串來指定資料來源的。而我們的ADO 支援的ConnectionString 屬性只有四個參數,其中有兩個還是針對遠端資料服務,也就是說對我們來講,
它支援的只有兩個,是哪兩個呢?

是Provider= 指定用來串連的提供者名稱。 糟糕,這個剛剛不是已經有過嗎?沒錯,和哪個Provider屬性做一樣的事,那豈不是只有一個!沒錯,唯一的一個是File Name。而File Name= 指定包含預先設定串連資訊的特定提供者的檔案名稱,其實通常就是尾碼為.udl的檔案。好象這個File Name對大多數人來講,也沒有用過,慘!那我們平時用的算什麼呢?
別急,還有一句話!“任何其他參數將直接傳遞到提供者而不經過 ADO 處理”。那就是說我們平時常用的串連參數實際上對ADO來講,就是被它這樣給處理掉了。

接下來動手做做,我們以建立一個串連Microsoft Access資料庫mydb.mdb的串連為例

使用Microsoft.Jet.OLEDB.4.0提供者
對我來說,我把下面這種串連看成是“UDL方式”
先要建立一個udlfile.udl檔案,是利用檔案管理工具的一個進程“資料連線屬性”來建立的。可以這麼做,先建一個空的.txt檔案,然後改名為.udl就可以啟動該進程產生所需的OLEDB資料連線.udl文檔了。
在這裡,你可以指定OLE DB提供者為Microsoft.Jet.OLEDB.4.0,
再指定資料來源是C:\Inetpub\wwwroot\asp\adodb\MYDB.MDB。
這樣我們會得到一個具有以下內容的udlfile.udl檔案

[oledb]
Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\Inetpub\wwwroot\asp\adodb\MYDB.MDB;


之後在.asp檔案中利用該udl檔案來建立資料來源的串連

<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "File Name=c:\udl\udlfile.udl"
%>


什麼是“非UDL方式”呢?
就是指不建立UDL檔案,而是直接在程式中指定,即:

<%
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\Inetpub\wwwroot\asp\adodb\MYDB.MDB;"
%>


大家看出來了,我們平時這種指定的用法其實用的就是.udl檔案中產生的連接字串我們知道Access資料庫除了用上面這種驅動,還可以使用ODBC提供的驅動,
這樣的話,我們仍用“UDL方式”和“非UDL方式”兩種方式來操作一下。另外,由於涉及ODBC驅動,所以會存在DSN及非DSN的選擇,我們選擇“系統DSN方式”,假設名字叫mydsn好了。

UDL方式
用和上面一樣的方法建立一個檔案udlodbc.udl,選擇資料提供者為Microsoft OLE DB Provider for ODBC drivers ,如果你事先已經建好了系統DSN的話,就可以直接在資料來源中選中系統DSN的名字mydsn了,這樣做似乎會有些問題。最好還是選擇使用“產生連接字串”,點擊“編譯”,便彈出資料來源選擇視窗,我們選用機器資料來源標籤,從裡面可以選擇我們已經建立了的系統DSN名字mydsn,然後確定。其實,你也可以重新建立一個新的系統DSN,這時你會看到,建立新的DSN的介面,就是ODBC的介面。(至於如何建立系統DSN我就不細說了)
這樣我們的udlodbc.udl就建立了,用記事本開啟看看,內容大致如下:

[oledb]
Provider=MSDASQL.1;
Extended properties= "DSN=mydsn;
DBQ=C:\Inetpub\wwwroot\asp\adodb\mydb.mdb;"


接下來和上面是一樣的,在.asp程式中使用該.udl檔案

<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "File Name=c:\udl\udlodbc.udl"
%>



那什麼是這種情況下“非UDL方式”呢?當然也是把連接字串寫在程式中了

<%
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "Provider=MSDASQL.1;
Extended properties=""DSN=mydsn;
DBQ=C:\Inetpub\wwwroot\asp\adodb\mydb.mdb;"""
%>


我們再根據ADO的預設情況,省略掉可以不寫的部分,便成了以下的樣子:

<%
Set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DSN=mydsn;"
%>


這就是我們常說的系統DSN方法。

大家可以推匯出檔案DSN方法,以及非D



相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。