[藍(lán)][粗]在ASP程序中訪問Access數(shù)據(jù)庫

2010-08-28 10:45:56來源:西部e網(wǎng)作者:

    在基于微軟IIS/PWS的網(wǎng)絡(luò)平臺(tái)上,通過服務(wù)器端運(yùn)行的ASP程序來訪問后臺(tái)數(shù)據(jù)庫,是一種最常見的模式了。而對(duì)于小型的數(shù)據(jù)庫應(yīng)用需求,微軟的Access數(shù)據(jù)庫,應(yīng)該是與ASP程序配套使用的首選。由于Access數(shù)據(jù)庫的ODBC驅(qū)動(dòng)程序支持的SQL指令全,執(zhí)行效率高,所以Access后臺(tái)數(shù)據(jù)庫+ASP服務(wù)器端程序+客戶端IE瀏覽器,是一個(gè)精練實(shí)用高效的組合模式。

  在這種使用模式中,ASP程序無疑是最重要的,是溝通客戶端和后臺(tái)數(shù)據(jù)庫之間的橋梁。在ASP程序中,通過VB Script,建立對(duì)Access數(shù)據(jù)庫的連接,是客戶能夠訪問后臺(tái)數(shù)據(jù)庫的前提。

  一、建立Access數(shù)據(jù)庫連接的常用方法

  在ASP中建立對(duì)Access數(shù)據(jù)庫連接的一般格式如下:     

  它的各步驟及參數(shù)意義如下:

  第一行程序:利用Server對(duì)象的MapPath函數(shù),取得要打開數(shù)據(jù)庫的完整的文件路徑,并存儲(chǔ)在變量DbPath中。這其中,數(shù)據(jù)庫名是我們需要指定的參數(shù),應(yīng)該用我們要打開的數(shù)據(jù)庫的實(shí)際名稱替代。如果數(shù)據(jù)庫名是直接作為常量出現(xiàn),要用引號(hào)將其括起來,并且不能丟掉擴(kuò)展名。例如數(shù)據(jù)庫是Test.mdb,則該行程序成為:DbPath=Server.MapPath(“Test.mdb”)。

  第二行程序:建立一個(gè)ADO對(duì)象集中的Connection對(duì)象,也即連接對(duì)象。這是建立數(shù)據(jù)庫連接的初始步驟。執(zhí)行這行程序后,Conn成為一個(gè)連接對(duì)象。

  第三行程序:利用連接對(duì)象Conn的Open方法打開一個(gè)指定的數(shù)據(jù)庫。因?yàn)槲覀円蜷_的是Access數(shù)據(jù)庫,所以要指定ODBC驅(qū)動(dòng)程序參數(shù),表示要透過Access的ODBC驅(qū)動(dòng)程序來訪問數(shù)據(jù)庫:driver={Microsoft Access Driver (*.mdb)};。另一個(gè)參數(shù)dbq= & DbPath,運(yùn)算后等效于dbq=Server.MapPath(數(shù)據(jù)庫名) ,是利用了第一行的Server.MapPath(數(shù)據(jù)庫名)函數(shù),用來指定要打開的數(shù)據(jù)庫文件。到這里,就已經(jīng)打開了數(shù)據(jù)庫名指定的數(shù)據(jù)庫。如果數(shù)據(jù)庫名是“test.mdb”,則打開Access數(shù)據(jù)庫Test.mdb。在這一行里指定的參數(shù),要嚴(yán)格按照格式原樣寫出,不能省略或改動(dòng),也沒有可變參數(shù)。

  第四行程序:建立一個(gè)ADO對(duì)象集中的Recordset對(duì)象,以便利用Recordset對(duì)象操作數(shù)據(jù)庫(當(dāng)然,這只是對(duì)數(shù)據(jù)庫操作的多種方式之一)。執(zhí)行這行后,rs就成為一個(gè)Recordset對(duì)象。

  第五行程序:利用rs對(duì)象的Open方法打開數(shù)據(jù)庫中的數(shù)據(jù)表。這其中有四個(gè)參數(shù),其意義如下:

  數(shù)據(jù)表名或SQL指令串:在這個(gè)參數(shù)里指定要打開的數(shù)據(jù)庫內(nèi)的數(shù)據(jù)表名稱,或者是用SQL的Select指令串確定的數(shù)據(jù)表的指定范圍數(shù)據(jù),例如,數(shù)據(jù)庫Test.mdb中有數(shù)據(jù)表Number,則該參數(shù)成為“Number”,注意引號(hào)不能丟;若想打開數(shù)據(jù)表Number中xh字段值小于90的數(shù)據(jù)記錄,則該參數(shù)可能成為如下的形式:

  “Select * From Number Where xh < 90”。

  Connection對(duì)象:指定已經(jīng)打開的數(shù)據(jù)庫的Connection對(duì)象,在這里固定是Conn,注意無須引號(hào)的。

  Recordset類型:表示打開數(shù)據(jù)表的方式,有四種選擇。數(shù)字0表示只讀方式,且當(dāng)前記錄只能下移;數(shù)字1表示可讀寫方式,當(dāng)前記錄可自由上下移動(dòng),但不能及時(shí)看到別的用戶建立的新記錄,除非重新啟動(dòng);數(shù)字2表示可讀寫方式,當(dāng)前記錄可自由移動(dòng),而且可以及時(shí)看到別的用戶增加的新記錄;數(shù)字3表示只讀方式,但當(dāng)前記錄可以自由移動(dòng)。一般選擇2為好,除非為了禁止數(shù)據(jù)被修改。

  鎖定類型:這個(gè)參數(shù)指定數(shù)據(jù)庫的鎖定功能。因?yàn)榫W(wǎng)絡(luò)上的數(shù)據(jù)庫都是多用戶的,很可能同時(shí)有多個(gè)用戶在操作數(shù)據(jù)庫。為了避免錯(cuò)誤,讓同一時(shí)間只可能有一個(gè)用戶修改數(shù)據(jù),就要用鎖定功能。有四種選擇:數(shù)字1表示只讀方式鎖定,用戶不能更改數(shù)據(jù);數(shù)字2表示悲觀鎖定,當(dāng)一個(gè)用戶用rs對(duì)象開始修改數(shù)據(jù)時(shí)就鎖定數(shù)據(jù)庫,直到用戶用rs.Update更新記錄后,才解除鎖定;數(shù)字3表示樂觀鎖定,只有在數(shù)據(jù)寫入數(shù)據(jù)庫中時(shí)候才鎖定,不保險(xiǎn),慎用!數(shù)字4表示批次樂觀鎖定,只有在使用rs.UpdateBatch成批更新數(shù)據(jù)時(shí)候才鎖定數(shù)據(jù)記錄。屬于很少使用的。一般地,使用悲觀鎖定比較安全,但是效率要低些。

    二、使用Recordset對(duì)象操作數(shù)據(jù)

  用上面的方法打開數(shù)據(jù)庫,是利用了Recordset對(duì)象建立的數(shù)據(jù)庫連接,然后的對(duì)數(shù)據(jù)操作,也要使用該對(duì)象。

  用rs.open “數(shù)據(jù)表名”,Conn,2,2 方式打開數(shù)據(jù)表,就可以方便的對(duì)數(shù)據(jù)進(jìn)行操作:

  常見的操作對(duì)象:

    rs.addnew :添加一個(gè)新記錄在數(shù)據(jù)表末尾。

    rs.delete :刪除當(dāng)前記錄。

    rs.eof :判斷是否已過最后記錄。

    rs.bof :判斷是否移過首記錄。

    rs.update :數(shù)據(jù)修改生效。

    rs(“字段名”):當(dāng)前記錄指定字段的值。

  從數(shù)據(jù)表中提取數(shù)據(jù):用x=rs(“字段名”)的格式,提取數(shù)據(jù)表中當(dāng)前記錄指定字段的值。

  向數(shù)據(jù)表中填入或修改數(shù)據(jù):用rs(“字段名”)=數(shù)據(jù)值或變量的方式,修改當(dāng)前記錄指定字段的值。

  三、使用SQL指令操作數(shù)據(jù)庫

  在使用SQL指令對(duì)數(shù)據(jù)庫進(jìn)行操作時(shí),要用如下方式打開數(shù)據(jù)庫和操作:     

  四、使用DSN連接數(shù)據(jù)庫

  在以上連接數(shù)據(jù)庫的方式中,都是在程序中指定數(shù)據(jù)庫,指定ODBC驅(qū)動(dòng)程序。如果數(shù)據(jù)源有變化,就需要修改程序。如果在系統(tǒng)級(jí)別上,預(yù)先定義好數(shù)據(jù)源DSN,就可以避免這個(gè)麻煩。

  在定義DSN的過程中,就已經(jīng)指定好了數(shù)據(jù)源需要的ODBC驅(qū)動(dòng)程序,也指定好了數(shù)據(jù)庫文件的實(shí)際路徑和名字,我們?cè)诔绦蛑,只需要引用預(yù)先定義的數(shù)據(jù)源名DSN即可。

  五、結(jié)束語

  在ASP程序中,建立數(shù)據(jù)庫的連接和訪問數(shù)據(jù)庫,有很多方式和技術(shù)細(xì)節(jié),在此難以一一詳述。實(shí)際上,對(duì)SQL Server數(shù)據(jù)庫,DBF數(shù)據(jù)庫,文本文件,電子表格文件等,也都可以很方便的打開和訪問,與對(duì)Access數(shù)據(jù)庫的訪問大同小異而已。如果說方便,Access應(yīng)該是首選。如果考慮安全保密性,SQL數(shù)據(jù)庫更好些。使用系統(tǒng)數(shù)據(jù)源DSN的方式建立對(duì)數(shù)據(jù)庫的連接,具有更大的靈活性,也更簡(jiǎn)便些。

關(guān)鍵詞:ASP

贊助商鏈接: