摘要:
本文討論利用ASP存取DBF、DBC、MDB、Excel、SQL Server型數(shù)據(jù)的方法及函數(shù)實現(xiàn),最后給出一個利用本文提供的函數(shù)存取Excel型數(shù)據(jù)庫的例子,對企事業(yè)數(shù)據(jù)重用及共享具有很強的實際意義。
關(guān)鍵詞:
ASP數(shù)據(jù)庫存取 DBF DBC MDB Excel SQL Server
前言
在Internet/Intranet網(wǎng)頁上隨處可見留言板、討論組、網(wǎng)上投票、網(wǎng)上調(diào)查、聊天室等Internet功能模塊,這些程序都是利用ASP(Active Server Page)與數(shù)據(jù)庫技術(shù)結(jié)合而實現(xiàn)的。在Internet/Intranet上用的數(shù)據(jù)庫大都是mdb數(shù)據(jù)庫或SQL<數(shù)據(jù)庫,但是在企事業(yè)Intranet<網(wǎng)中,各種版本的數(shù)據(jù)庫已存在如DBF<、DBC、Excel、文本數(shù)據(jù)庫,這些數(shù)據(jù)庫是由應(yīng)用軟件如辦公自動化系統(tǒng)、財務(wù)軟件等所生成,如果ASP能直接利用這些類型數(shù)據(jù)庫,就不需要重新建立數(shù)據(jù)庫,進(jìn)一步實現(xiàn)企業(yè)數(shù)據(jù)共享,究竟這些數(shù)據(jù)庫能不能直接被ASP使用,筆者經(jīng)過長期探討總結(jié)出給出肯定的答案。
一、ASP的對象存取數(shù)據(jù)庫方法
在ASP中,用來存取數(shù)據(jù)庫的對象統(tǒng)稱ADO(Active Data Objects),主要含有三種對象:Connection、Recordset 、Command,其中Connection負(fù)責(zé)打開或連接數(shù)據(jù)庫,Recordset負(fù)責(zé)存取數(shù)據(jù)表,Command負(fù)責(zé)對數(shù)據(jù)庫執(zhí)行行動查詢(Action Query)命令和執(zhí)行SQL Server的Stored Procedure。只依靠這三個對象還是無法存取數(shù)據(jù)庫的,還必須具有數(shù)據(jù)庫存取的驅(qū)動程序:OLE DB驅(qū)動程序和ODBC驅(qū)動程序。對于任何一種數(shù)據(jù)庫都必須有相對應(yīng)的OLE DB驅(qū)動程序和ODBC驅(qū)動程序,ADO<才能對數(shù)據(jù)庫進(jìn)行存取。存取過程可用下圖描述::
圖1
由上圖可知,ADO對象必須與各種驅(qū)動程序結(jié)合才能存取各種類型數(shù)據(jù)庫,不同的數(shù)據(jù)庫需要不同的驅(qū)動程序。究竟機器上已安裝哪些驅(qū)動程序呢?可通過如下的方法來驗證:Windows9X或NT的“開始”→“設(shè)置”→“控制面板”→“ODBC Data Source(32Bit)”中的“驅(qū)動程序”標(biāo)簽頁查證我們的機器上究竟裝了哪些驅(qū)動程序。大致有如下表所列的驅(qū)動程序:
<驅(qū)動程序 <適用數(shù)據(jù)庫類型
Microsoft.Jet.OLEDB.4.0 Mdb
Microsoft Access Driver Access
Microsoft dBase Driver Dbase
Microsoft Excel Driver Excel
Microsoft Visual FoxPro Driver Dbc
SQLOLEDB.1 SQL Server7.0
二、連接數(shù)據(jù)庫和打開數(shù)據(jù)表
不同的數(shù)據(jù)庫連接方法不一樣(即建立Connection的實例方法不一樣),一旦建立Connection實例完畢,利用Recordset對象進(jìn)行存取數(shù)取數(shù)據(jù)的方法大同小異,下面對于不同的數(shù)據(jù)類型,編寫了相對應(yīng)的連接函數(shù),其原型如下:
1)Function CreatMdbRecordset( 數(shù)據(jù)庫文件名, 數(shù)據(jù)表文件名或Select語句 );建立Mdb類型的數(shù)據(jù)庫對象
2)Function CreateSecuredMdbRecordset( 數(shù)據(jù)庫文件名,數(shù)據(jù)表文件名或Select語句, 密碼 );建立帶密碼的MDB類型的數(shù)據(jù)庫對象;
3)Function CreateDbfRecordset(目錄名, DBF文件名或Select語句);建立DBF類型的數(shù)據(jù)庫對象;
4)Function CreateDbcRecordset(DBC數(shù)據(jù)庫文件名, 數(shù)據(jù)表名或Select語句);建立DBC類型的數(shù)據(jù)庫對象;
5)Function CreateExcelRecordset(XLS文件名,Sheet名);建立Excel類型的數(shù)據(jù)庫對象;
6)Function CreateSQLServerRecordset(計算機名稱,用戶ID, 用戶密碼,數(shù)據(jù)庫名稱 數(shù)據(jù)表或查看表或Select指令 );建立SQL Server 類型的數(shù)據(jù)庫對象;
三、程序清單
‘以下程序用VBScript編寫
1)建立MdbRecordset對象,Mdb數(shù)據(jù)庫是一個完整的數(shù)據(jù)庫,內(nèi)部可能含有若干個數(shù)據(jù)表,在此函數(shù)中,Connection的作用是連接數(shù)據(jù)庫,Recordset的作用是打開數(shù)據(jù)表。
Function CreateMdbRecordset(數(shù)據(jù)庫文件名, 數(shù)據(jù)表名或Select語句 )
Dim conn,Provider,DBPath
‘ 建立Connection 對象
Set conn = Server.CreateObject("ADODB.Connection")
Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
DBPath = "Data Source=" & Server.MapPath( "數(shù)據(jù)庫文件名" )
‘打開數(shù)據(jù)庫
conn.Open Provider & DBPath
Set CreateMdbRecordset = Server.CreateObject("ADODB.Recordset")
‘ 打開數(shù)據(jù)表,參數(shù)二為Connection對象
CreateMdbRecordset.Open "數(shù)據(jù)表名", conn, 2, 2
End Function
2)建立帶密碼的Mdb數(shù)據(jù)庫的Recordset對象,它的建立方式與建立不帶密碼的Mdb數(shù)據(jù)庫的Recordset對象類似,只是多了一個密碼參數(shù),即在與數(shù)據(jù)庫連接時,必須給出密碼信息。