利用ASP存取各種常用類型資料庫

來源:互聯網
上載者:User
資料|資料庫

  摘要:

  本文討論利用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原始碼

ASP檔案 <%

' 建立Connection對象

Function CreateExcelRecordset(xlsfile,sheet)

Dim rs,conn,Driver,DBPath

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

Driver = "Driver={Microsoft Excel Driver (*.xls)};"

DBPath = "DBQ=" & Server.MapPath( "xlsfile" )

' 調用Open 方法串連資料庫

conn.Open Driver & DBPath

set CreateExcelRecordset = Server.CreateObject("ADODB.Recordset")

' 開啟Sheet表,參數二'>Connection對象

CreateExcelRecordset.Open "Select * From ["&sheet&"$]",conn, 2, 2

End Function

%>

<HTML>

<BODY bgcolor="#FFFFFF">

<TABLE BORDER=1>

<TR BGCOLOR=#00FFFF>

<%

'本行是關鍵行,對函數的引用

' set rs=CreateExcelRecordset("1.xls","一班")

Part I輸出“表頭名稱”且表頭的背景的顏色為#00FFFF

' For i=0 to rs.Fields.Count-1

Response.Write "<TD>" & rs(i).Name & "</TD>"

Next

%>

</TR>

<%

' Part '>輸出資料表的“內容”

rs.MoveFirst ' 將目前的資料記錄移到第一項

While Not rs.EOF ' 判斷是否過了最後一項

Row = "<TR>"

For i=0 to rs.Fields.Count-1

Row = Row & "<TD>" & rs(i) & "</TD>"

Next

Response.Write Row & "</TR>"

rs.MoveNext ' 移到下一項

Wend

%>

</TABLE></CENTER>

</BODY>

</HTML>

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

圖3

參考文獻:

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

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



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.