摘要:該文討論利ASP下存取DBF、DBC、MDB、Excel、SQL Server類型數(shù)據(jù)的方法及函數(shù)實現(xiàn),對企事業(yè)數(shù)據(jù)重用及共享具有很強(qiáng)的實際意義。
關(guān)鍵詞:數(shù)據(jù)庫;ASP;DBF;DBC
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)35-2398-02
Realization of the Common Type Database Access Based on ASP
MA Jing
(Graphic Information Center,Nanjing College of Information Technolegy,Nanjing 210046,China)
Abstract: In this paper we discuss how we can use ASP to acess the common type database such as DBF,DBC,MDB,Excel,SQL Server and so on,which is practical to enterprise in data-sharing and data-reuse.
Key words: database; ASP; DBF; DBC
如今各個網(wǎng)站上留言板、討論組、網(wǎng)上投票、網(wǎng)上調(diào)查、聊天室等功能模塊隨處可見,這些程序都是利用ASP與數(shù)據(jù)庫技術(shù)結(jié)合而實現(xiàn)的。在網(wǎng)頁上用的數(shù)據(jù)庫大都是mdb數(shù)據(jù)庫或SQL數(shù)據(jù)庫,但是在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ù)共享。
1 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)行存取。
ADO對象必須與各種驅(qū)動程序結(jié)合才能存取各種類型數(shù)據(jù)庫,不同的數(shù)據(jù)庫需要不同的驅(qū)動程序。究竟機(jī)器上已安裝哪些驅(qū)動程序呢?可通過如下的方法來驗證:WindowsXP或NT的“開始”→“設(shè)置”→“控制面板”→“ODBC Data Source(32Bit)”中的“驅(qū)動程序”標(biāo)簽頁查證我們的機(jī)器上究竟裝了哪些驅(qū)動程序。大致有如下表所列的驅(qū)動程序:
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。
2 連接數(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(計算機(jī)名稱,用戶ID,用戶密碼,數(shù)據(jù)庫名稱,數(shù)據(jù)表或查看表或Select指令);建立SQL Server 類型的數(shù)據(jù)庫對象;
3 程序清單
1) 建立帶密碼的Mdb數(shù)據(jù)庫的Recordset對象。
它的建立方式與建立不帶密碼的Mdb數(shù)據(jù)庫的Recordset對象類似,只是多了一個密碼參數(shù),即在與數(shù)據(jù)庫連接時,必須給出密碼信息。
Function CreateSecuredMdbRecordset(數(shù)據(jù)庫/ asp/aspsave1.htm,表名或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( \"數(shù)據(jù)庫/asp/aspsave1.htm\" )
’ 連接數(shù)據(jù)庫,注意下面一行帶有密碼參數(shù)
conn.Open Provider DBPath”Jet OLEDB:Database Password=”assword
Set CreateSecuredMdbRecordset = Server.CreateObject(\"ADODB.Recordset\")
’ 打開數(shù)據(jù)表,參數(shù)二為Connection對象
CreateSecuredMdbRecordset.Open \"表名\", conn,2, 2
End Function
2) DBF文件不是一個標(biāo)準(zhǔn)的數(shù)據(jù)庫文件,只相當(dāng)于標(biāo)準(zhǔn)數(shù)據(jù)庫文件中的一個數(shù)據(jù)表,所以為了使用DBF文件,采用把所有的DBF文件放在一個目錄下,這樣把目錄名看成標(biāo)準(zhǔn)數(shù)據(jù)中的數(shù)據(jù)庫表,每一個DBF文件相當(dāng)于標(biāo)準(zhǔn)數(shù)據(jù)庫的數(shù)據(jù)表。下面函數(shù)中Directory是DBF所在的目錄名。
Function CreateDbfRecordset( 目錄名, DBF/asp/aspsave1.htm或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( \"目錄名\" )
’ 調(diào)用Open 方法打開數(shù)據(jù)庫
conn.Open Driver SourceType DBPath
Set CreateDbfRecordset =
Server.CreateObject(\"ADODB.Recordset\")
’ 打開DBF文件,參數(shù)二為Connection對象
CreateDbfRecordset.Open
DBF/asp/aspsave1.htm或Select語句,conn, 2,2
End Function
3)dbc文件的存取實現(xiàn)
DBPath=\"SourceDB=\" Server.MapPath( \"DBC數(shù)據(jù)庫/ asp/aspsave1.htm\")
’ 連接數(shù)據(jù)庫
conn.Open Driver SourceType DBPath
Set CreateDbcRecordset = Server.CreateObject(\"ADODB.Recordset\")
’ 打開數(shù)據(jù)表,參數(shù)二為Connection對象
CreateDbcRecordset.Open \"表名或Select語句\", conn,2,2
End Function
4) 將Excel97或Excel2000生成的XLS文件(book)看成一個數(shù)據(jù)庫,其中的每一個工作表(sheet)看成數(shù)據(jù)庫表。
Function CreateExcelRecordset( XLS/asp/aspsave1.htm,Sheet名 )
Dim conn.Driver,DBPath
’ 建立Connection對象
Set conn = Server.CreateObject(\"ADODB.Connection\")
Driver = \"Driver={Microsoft Excel Driver (*.xls)};\"
DBPath=\"DBQ=\"Server.MapPath(\"XLS/asp/aspsave1.htm\")
’ 調(diào)用Open 方法打開數(shù)據(jù)庫
conn.Open Driver DBPath
Set CreateExcelRecordset =Server.CreateObject(\"ADODB.Recordset\")
’ 打開Sheet,參數(shù)2為Connection對象,因為Excel
’ ODBC驅(qū)動程序無法直接用sheet名來打開sheet,所
’ 以請注意以下的select語句:
CreateExcelRecordset.Open \"Select * From [sheet1$]”, conn, 2, 2
End Function
5)SQL Server屬于Server級的數(shù)據(jù)庫,使用時要求比較嚴(yán)格,必須要求輸入用戶名及密碼才能使用。
Function CreateSQLServerRecordset(計算機(jī)名稱,用戶ID,用戶密碼,數(shù)據(jù)庫名數(shù)據(jù)表或查看表或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=\"數(shù)據(jù)庫名稱
Conn open Paras
Set CreateSQLServerRecordset = Server.CreateObject(\"ADODB.Recordset\")
CreateSQLServerRecordset.Open source,conn,2,2
End Function
4 結(jié)論
利用上面的函數(shù)就可以打開常用類型的數(shù)據(jù)庫,然后利用ADO的Recordset對象的增加記錄、刪除記錄、修改記錄等功能就可以對數(shù)據(jù)庫進(jìn)行操作。但在實際開發(fā)中我們發(fā)現(xiàn),如果使用DBF、DBC、Excel數(shù)據(jù)庫,執(zhí)行效率沒有MDB數(shù)據(jù)庫效率高,最好盡可能用MDB類型數(shù)據(jù)庫。
如果用DBF、DBC、Excel數(shù)據(jù)庫,需要注意的是:Excel數(shù)據(jù)庫只能讀取、增加記錄、修改記錄,但不能刪除記錄;DBF、DBC可以讀取記錄、增加記錄、刪除記錄、修改記錄,但是在增加記錄時,任何一個字段值都不能為空,由此可見局限性較大,所以應(yīng)盡可能地用MDB或SQL數(shù)據(jù)庫。
參考文獻(xiàn):
[1] 藏楊.ASP軟件工程案例精解[M].電子工業(yè)出版社,2004:75-102,201-223.
[2] 鄭有,胡紅一,楊志崧.基于ASP的專家咨詢系統(tǒng)[J].現(xiàn)代情報,2006,26(7):65-66.
[3] 諶愛文,施榮華.ASP+Access的安全性研究[J].微電子學(xué)與計算機(jī),2006,23(6):106-108.
[4] 王蕾,李培峰,楊李文.基于ASP.NET的Web應(yīng)用系統(tǒng)架構(gòu)探討[J].計算機(jī)技術(shù)與發(fā)展,2006,16(7):55-56,60.