top
Loading...
利用ASP存取各種常用類型數據庫

摘要


本文討論利用ASP存取DBF、DBC、MDB、Excel、SQL Server型數據的方法及函數實現,最后給出一個利用本文提供的函數存取Excel型數據庫的例子,對企事業數據重用及共享具有很強的實際意義。


關鍵詞:


ASP數據庫存取 DBF DBC MDB Excel SQL Server


前言


在Internet/Intranet網頁上隨處可見留言板、討論組、網上投票、網上調查、聊天室等Internet功能模塊,這些程序都是利用ASP(Active Server Page)與數據庫技術結合而實現的。在Internet/Intranet上用的數據庫大都是mdb數據庫或SQL<數據庫,但是在企事業Intranet<網中,各種版本的數據庫已存在如DBF<、DBC、Excel、文本數據庫,這些數據庫是由應用軟件如辦公自動化系統、財務軟件等所生成,如果ASP能直接利用這些類型數據庫,就不需要重新建立數據庫,進一步實現企業數據共享,究竟這些數據庫能不能直接被ASP使用,筆者經過長期探討總結出給出肯定的答案。


一、ASP的對象存取數據庫方法


在ASP中,用來存取數據庫的對象統稱ADO(Active Data Objects),主要含有三種對象:Connection、Recordset 、Command,其中Connection負責打開或連接數據庫,Recordset負責存取數據表,Command負責對數據庫執行行動查詢(Action Query)命令和執行SQL Server的Stored Procedure。只依靠這三個對象還是無法存取數據庫的,還必須具有數據庫存取的驅動程序:OLE DB驅動程序和ODBC驅動程序。對于任何一種數據庫都必須有相對應的OLE DB驅動程序和ODBC驅動程序,ADO<才能對數據庫進行存取。存取過程可用下圖描述:




由上圖可知,ADO對象必須與各種驅動程序結合才能存取各種類型數據庫,不同的數據庫需要不同的驅動程序。究竟機器上已安裝哪些驅動程序呢?可通過如下的方法來驗證:Windows9X或NT的“開始”→“設置”→“控制面板”→“ODBC Data Source(32Bit)”中的“驅動程序”標簽頁查證我們的機器上究竟裝了哪些驅動程序。大致有如下表所列的驅動程序:


























<驅動程序


<適用數據庫類型


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


二、連接數據庫和打開數據表


不同的數據庫連接方法不一樣(即建立Connection的實例方法不一樣),一旦建立Connection實例完畢,利用Recordset對象進行存取數取數據的方法大同小異,下面對于不同的數據類型,編寫了相對應的連接函數,其原型如下:


1)Function CreatMdbRecordset( 數據庫文件名, 數據表文件名或Select語句 );建立Mdb類型的數據庫對象


2)Function CreateSecuredMdbRecordset( 數據庫文件名,數據表文件名或Select語句, 密碼 );建立帶密碼的MDB類型的數據庫對象;


3)Function CreateDbfRecordset(目錄名, DBF文件名或Select語句);建立DBF類型的數據庫對象;


4)Function CreateDbcRecordset(DBC數據庫文件名, 數據表名或Select語句);建立DBC類型的數據庫對象;


5)Function CreateExcelRecordset(XLS文件名,Sheet名);建立Excel類型的數據庫對象;


6)Function CreateSQLServerRecordset(計算機名稱,用戶ID, 用戶密碼,數據庫名稱 數據表或查看表或Select指令 );建立SQL Server 類型的數據庫對象;


三、程序清單


'以下程序用VBScript編寫


1)建立MdbRecordset對象,Mdb數據庫是一個完整的數據庫,內部可能含有若干個數據表,在此函數中,Connection的作用是連接數據庫,Recordset的作用是打開數據表。


Function CreateMdbRecordset(數據庫文件名, 數據表名或Select語句 )


Dim conn,Provider,DBPath


' 建立Connection 對象
Set conn = Server.CreateObject("ADODB.Connection")
Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
DBPath = "Data Source=" & Server.MapPath( "數據庫文件名" )
'打開數據庫
conn.Open Provider & DBPath

Set CreateMdbRecordset = Server.CreateObject("ADODB.Recordset")
' 打開數據表,參數二為Connection對象
CreateMdbRecordset.Open "數據表名", conn, 2, 2


End Function


2)建立帶密碼的Mdb數據庫的Recordset對象,它的建立方式與建立不帶密碼的Mdb數據庫的Recordset對象類似,只是多了一個密碼參數,即在與數據庫連接時,必須給出密碼信息。


Function CreateSecuredMdbRecordset( 數據庫文件名, 數據表名或Select語句,password )


Dim conn,Provider,DBPath


' 建立Connection 對象
Set conn = Server.CreateObject("ADODB.Connection")
Provider = "Provider=Microsoft.Jet.OLEDB.4.0;"
DBPath = "Data Source=" & Server.MapPath( "數據庫文件名" )
' 連接數據庫,注意下面一行帶有密碼參數
conn.Open Provider & DBPath&”Jet OLEDB:Database Password=”&assword
Set CreateSecuredMdbRecordset = Server.CreateObject("ADODB.Recordset")
' 打開數據表,參數二為Connection對象
CreateSecuredMdbRecordset.Open "數據表名", conn, 2, 2


End Function


3)DBF文件不是一個標準的數據庫文件,只相當于標準數據庫文件中的一個數據表,所以為了使用DBF文件,采用把所有的DBF文件放在一個目錄下,這樣把目錄名看成標準數據中的數據庫表,每一個DBF文件相當于標準數據庫的數據表。下面函數中Directory是DBF所在的目錄名,


Function CreateDbfRecordset( 目錄名, DBF文件名或Select語句 )


Dim conn,Driver,SourceType,DBPath


' 建立Connection 對象
Set conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Visual FoxPro Driver};"
SourceType = "SourceType=DBF;"
DBPath = "SourceDB=" & Server.MapPath( "目錄名" )

' 調用Open 方法打開數據庫
conn.Open Driver & SourceType & DBPath

Set CreateDbfRecordset = Server.CreateObject("ADODB.Recordset")
' 打開DBF文件,參數二為Connection對象
CreateDbfRecordset.Open DBF文件名或Select語句, conn, 2, 2


End Function


4)由Foxpro生成的DBC數據庫與MDB數據庫相似,都是一個數據庫包含幾個數據表的形式,所以對DBC數據庫的存取方法與MDB數據庫相似。


Function CreateDbcRecordset( DBC數據庫文件名, 數據表名或Select語句 )


Dim conn,Driver,SourceType,DBPath


' 建立Connection 對象
Set conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Visual FoxPro Driver};"
SourceType = "SourceType=DBC;"
DBPath = "SourceDB=" & Server.MapPath( "DBC數據庫文件名" )
' 連接數據庫
conn.Open Driver & SourceType & DBPath
Set CreateDbcRecordset = Server.CreateObject("ADODB.Recordset")
' 打開數據表,參數二為Connection對象
CreateDbcRecordset.Open "數據表名或Select語句", conn, 2, 2


End Function


5)將Excel97或Excel2000生成的XLS文件(book)看成一個數據庫,其中的每一個工作表(sheet)看成數據庫表。


Function CreateExcelRecordset( XLS文件名,Sheet名 )


Dim conn.Driver,DBPath


' 建立Connection對象
Set conn = Server.CreateObject("ADODB.Connection")
Driver = "Driver={Microsoft Excel Driver (*.xls)};"
DBPath = "DBQ=" & Server.MapPath( "XLS文件名" )

' 調用Open 方法打開數據庫
conn.Open Driver & DBPath
Set CreateExcelRecordset = Server.CreateObject("ADODB.Recordset")
' 打開Sheet,參數二為Connection對象,因為Excel ODBC驅動程序無法直接用'sheet名來打開sheet,所以請注意以下的select語句
CreateExcelRecordset.Open "Select * From ["&sheet&”$]”, conn, 2, 2


End Function


6)SQL Server屬于Server級的數據庫,使用時要求比較嚴格,必須要求輸入用戶名及密碼才能使用。


Function CreateSQLServerRecordset(計算機名稱,用戶ID, 用戶密碼,數據庫名稱 數據表或查看表或Select指令 )


Dim Params, conn


Set CreatSQLServerConnection = Nothing


Set conn = Server.CreateObject("ADODB.Connection")


Params = "Provider=SQLOLEDB.1"


Params = Params & ";Data Source=" & Computer


Params = Params & ";User ID=" & UserID


Params = Params & ";Password=" & Password


Params = Params & ".Initial Catalog="&數據庫名稱


Conn open Paras


Set CreateSQLServerRecordset = Server.CreateObject("ADODB.Recordset")


CreateSQLServerRecordset.Open source, conn, 2, 2


End Function


利用上面的函數就可以打開常用類型的數據庫,然后利用ADO的Recordset對象的增加記錄、刪除記錄、修改記錄等功能就可以對數據庫進行操作。但是要說明的是,在實際開發中我們發現,如果使用DBF、DBC、Excel數據庫,執行效率沒有MDB數據庫效率高,最好盡可能用MDB類型數據庫。


如果用用DBF、DBC、Excel數據庫,下面幾點要注意:Excel數據庫只能讀取、增加記錄、修改記錄,但不能刪除記錄;DBF、DBC<可以讀取記錄、增加記錄、刪除記錄、修改記錄,但是在增加記錄時,任何一個字段值都不能為空,由此可看出局限性很大,所以盡可能地用MDB或SQL數據庫。


四、實例(存取Excel數據表)


為了更進一步說明這些函數的用法,本文給出一個存取Excel數據表的例子,其它函數的存取方法與此類似。假設有一個如圖2的名為1.xls的Excel文件, 含有三個工作表一班、二班、三班。下面得用上面的函數存取工作表“一班”的數據。



圖2

編寫ASP文件(文件名為1.asp)存取此Excel中文件。


點擊此處去看1.asp源代碼


利用IE和PWS(Personal Web Server)后瀏覽結果如圖3:



圖3


參考文獻:


[1]DataBase and the World Wide Web Marianne Winslett, University of Illinois


[2]http://www.aspobjects.com

北斗有巢氏 有巢氏北斗