《網(wǎng)絡(luò)技術(shù)與應(yīng)用》第9章 ASP訪問(wèn)數(shù)據(jù)庫(kù)_第1頁(yè)
《網(wǎng)絡(luò)技術(shù)與應(yīng)用》第9章 ASP訪問(wèn)數(shù)據(jù)庫(kù)_第2頁(yè)
《網(wǎng)絡(luò)技術(shù)與應(yīng)用》第9章 ASP訪問(wèn)數(shù)據(jù)庫(kù)_第3頁(yè)
《網(wǎng)絡(luò)技術(shù)與應(yīng)用》第9章 ASP訪問(wèn)數(shù)據(jù)庫(kù)_第4頁(yè)
《網(wǎng)絡(luò)技術(shù)與應(yīng)用》第9章 ASP訪問(wèn)數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第9章ASP訪問(wèn)數(shù)據(jù)庫(kù)

網(wǎng)絡(luò)技術(shù)與應(yīng)用9.1.1建立數(shù)據(jù)庫(kù)9.1數(shù)據(jù)庫(kù)及SQL基礎(chǔ)

1、數(shù)據(jù)庫(kù)的概念所謂數(shù)據(jù)庫(kù)就是按照一定數(shù)據(jù)模型組織、存儲(chǔ)在一起的,能為多個(gè)用戶共享的、與應(yīng)用程序相對(duì)獨(dú)立、相互關(guān)聯(lián)的數(shù)據(jù)集合。數(shù)據(jù)庫(kù)是由相互聯(lián)系的若干數(shù)據(jù)表(Table)組成,同一個(gè)數(shù)據(jù)庫(kù)中的表之間可建立聯(lián)系,通過(guò)這種聯(lián)系可以保證數(shù)據(jù)操作的一致性和完整性。數(shù)據(jù)表的概念學(xué)號(hào)姓名性別民族年齡入學(xué)日期聯(lián)系電話20060101郭靖男漢族202004-12-5666666620060102黃蓉女漢族192005-2-8888888820060105歐陽(yáng)克男藏族212006-3-99999999每一個(gè)數(shù)據(jù)表又包含一系列的記錄(Record),每條記錄包含若干個(gè)數(shù)據(jù)字段(Field)。數(shù)據(jù)表中的每一行稱為一條記錄,每一列稱為一個(gè)字段,且每個(gè)字段有個(gè)字段名。學(xué)生檔案(XSDA)

2、建立Access數(shù)據(jù)庫(kù)Access數(shù)據(jù)庫(kù)是一種關(guān)系型的桌面數(shù)據(jù)庫(kù)系統(tǒng),是Microsoft公司的辦公室自動(dòng)化套件Office中的一個(gè)應(yīng)用程序,可以完成小型數(shù)據(jù)庫(kù)的管理工作。從“開(kāi)始”菜單啟動(dòng)Access應(yīng)用程序,出現(xiàn)如圖8-1所示的界面,然后選擇“空Access數(shù)據(jù)庫(kù)”選項(xiàng),點(diǎn)擊“確定”按鈕,在出現(xiàn)的的框中輸入數(shù)據(jù)庫(kù)文件名XSGL.MDB(學(xué)生管理)。向Access數(shù)據(jù)庫(kù)的數(shù)據(jù)表中添加記錄9.1.2結(jié)構(gòu)化查詢語(yǔ)言SQLSelect是SQL語(yǔ)言的核心語(yǔ)句,它的功能是數(shù)據(jù)庫(kù)的查詢。使用語(yǔ)法:Select字段名列表From數(shù)據(jù)表名[Where條件][OrderBy字段][GoupBy字段]1.使用SELECT語(yǔ)句查詢數(shù)據(jù)字段名列表:就是要查詢的列。如果是多列,字段名之間用逗號(hào)隔開(kāi);如果要查詢所有列,字段名也可以用*代替。另外,字段名列表中也可包含常量、函數(shù)或其他表達(dá)式;數(shù)據(jù)表名:就是要操作的數(shù)據(jù)表,如果有多個(gè)表,表名之間也要用逗號(hào)隔開(kāi);Where條件:給定查詢時(shí)要滿足的條件。如果有多個(gè)條件,條件之間要用邏輯詞And或Or連接;Orderby字段:對(duì)查詢結(jié)果按指定字段進(jìn)行排序。升序用ASC,降序用DESC,如果省略,默認(rèn)為升序。Groupby字段:對(duì)查詢出的記錄進(jìn)行分組,然后分別統(tǒng)計(jì)結(jié)果。常用的計(jì)算函數(shù)有求和(Sum)、求平均(Average)、最大值(max)、最小值(Min)和統(tǒng)計(jì)記錄個(gè)數(shù)(Count)等。如果對(duì)組需要進(jìn)行篩選,后跟“Having條件短語(yǔ)”。SELECT語(yǔ)句說(shuō)明注意:(1)字符串?dāng)?shù)據(jù)要用雙引號(hào)括起來(lái)如:“20060101”,“張三三”,“男”,“信息專業(yè)”等。(2)日期型數(shù)據(jù)兩邊要加上“#”號(hào)如:#2006-6-5#表示2006年6月5日。Select語(yǔ)句應(yīng)用舉例:(1)選擇全部記錄、所有字段例:查詢XSDA中所有學(xué)生的全部信息。Select*FromXSDA(2)選擇指定字段例:查詢XSDA中所有學(xué)生的指定信息。Select學(xué)號(hào),姓名FromXSDA(3)產(chǎn)生派生字段數(shù)據(jù)例:在XSCJ表中查詢所有學(xué)生的學(xué)號(hào)、姓名和總分。因?yàn)閄SCJ表沒(méi)有存儲(chǔ)“總分”字段,但是我們可以通過(guò)現(xiàn)有字段把它計(jì)算出來(lái):Select學(xué)號(hào),姓名,英語(yǔ)+數(shù)學(xué)+計(jì)算機(jī)AS總分FromXSCJ(4)根據(jù)條件選擇記錄根據(jù)查詢條件對(duì)記錄進(jìn)行篩選,Where后跟一個(gè)邏輯表達(dá)式,只有表達(dá)式的值為“True”的記錄才被查詢出來(lái):例:查詢數(shù)學(xué)成績(jī)不及格的的的學(xué)號(hào)、姓名和數(shù)學(xué)成績(jī)Select學(xué)號(hào),姓名,數(shù)學(xué)FromXSCJwhere數(shù)學(xué)<60查詢英語(yǔ)成績(jī)?cè)?0分和80分之間的學(xué)生記錄Select*FromXSCJwhere英語(yǔ)Between60and80再如:查詢性別為“男”的學(xué)生信息Select學(xué)號(hào),姓名FromXSDAwhere性別="男"還有:查詢?cè)?005年12月以前入學(xué)的學(xué)生Select學(xué)號(hào),姓名,出生日期FromXSDAwhere入學(xué)日期<#1976-12-1#(5)按關(guān)鍵字查找有時(shí)候查詢結(jié)果不太確定,可按某個(gè)關(guān)鍵字進(jìn)行查詢。例:查詢所有姓“張”的學(xué)生信息Select*FromXSDAwhere姓名like"張%"其中,%代表任意字符。(6)查詢結(jié)果排序例:對(duì)查詢結(jié)果按學(xué)號(hào)降序排序Select*FromXSDAorderby學(xué)號(hào)DESC再如:對(duì)查詢結(jié)果按計(jì)算機(jī)成績(jī)升序排序Select*FromXSCJorderby計(jì)算機(jī)ASC實(shí)際上,如果你不注明排序方式,系統(tǒng)會(huì)默認(rèn)為是升序。(7)統(tǒng)計(jì)查詢例:查詢數(shù)學(xué)成績(jī)最高分Selectmax(數(shù)學(xué))FromXSCJ再如:查詢英語(yǔ)成績(jī)最低分Selectmin(數(shù)學(xué))FromXSCJ還有,統(tǒng)計(jì)性別為男的人數(shù):Selectcount(*)FromXSDAwhere性別="男"(8)分組查詢例:分別統(tǒng)計(jì)男、女生的平均年齡Selectaverage(年齡)FromXSDAGroupby性別系統(tǒng)執(zhí)行命令時(shí),首先把記錄按關(guān)鍵字“性別”分組,然后對(duì)每一組分別求平均年齡。(9)多表查詢例:查詢每個(gè)同學(xué)的基本信息和學(xué)生成績(jī):

SelectXSDA.學(xué)號(hào),XSDA.姓名,XSCJ.數(shù)學(xué),

XSCJ.計(jì)算機(jī)FromXSDA,XSCJWhereXSDA.學(xué)號(hào)=XSCJ.學(xué)號(hào)2.使用Insert語(yǔ)句插入記錄例:給XSDA數(shù)據(jù)表插入一條記錄(20060103,楊過(guò),男,漢族,#1988-8-8#,3322666)InsertintoXSDA(學(xué)號(hào),姓名,性別,民族,入學(xué)日期,聯(lián)系電話)Values("20060103","楊過(guò)","男","漢族",#2005-8-8#,3322666)3.使用Delete語(yǔ)句刪除記錄例:把姓名叫做“楊過(guò)”的記錄刪除掉DeletefromXSDAWhere姓名=“楊過(guò)”如果是把數(shù)據(jù)表中的記錄全部刪除掉,不加條件短語(yǔ)就行了。4.使用Update語(yǔ)句修改記錄例:把“歐陽(yáng)克”的電話號(hào)碼改為6655888UpdateXSDASet電話號(hào)碼=“6655888”Where姓名=“歐陽(yáng)克”再如:給黃蓉同學(xué)的數(shù)學(xué)成績(jī)加10分

UpdateXSCJSet數(shù)學(xué)=數(shù)學(xué)+10Where姓名="黃蓉"9.1.3設(shè)置數(shù)據(jù)源數(shù)據(jù)源,就是指開(kāi)放式數(shù)據(jù)庫(kù)鏈接(ODBC),它是一種數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,利用它可以訪問(wèn)來(lái)自多種數(shù)據(jù)庫(kù)管理系統(tǒng)的數(shù)據(jù)。因?yàn)椴煌臄?shù)據(jù)庫(kù)管理系統(tǒng)創(chuàng)建的數(shù)據(jù)庫(kù)是不相同的,為了實(shí)現(xiàn)讓不同的程序能訪問(wèn)相同的數(shù)據(jù)庫(kù),產(chǎn)生了開(kāi)放數(shù)據(jù)庫(kù)互聯(lián)標(biāo)準(zhǔn)ODBC,所以有人稱它為數(shù)據(jù)庫(kù)中的數(shù)據(jù)和數(shù)據(jù)查詢程序的一個(gè)接口或“解釋器”。我們以Windows2000操作系統(tǒng)為例,為Access數(shù)據(jù)庫(kù)XSGL.MDB設(shè)置數(shù)據(jù)源。設(shè)置數(shù)據(jù)源的步驟(1)在“控制面板”的“管理工具文件夾”中打開(kāi)數(shù)據(jù)源ODBC;(2)單擊“添加”按鈕,將出現(xiàn)“創(chuàng)建數(shù)據(jù)源”對(duì)話框;(3)選擇“MicrosoftAccessDriver(*.mdb)”,然后單擊“完成”按鈕,出現(xiàn)“ODBCMicrosoftAccess安裝”對(duì)話框;(4)輸入數(shù)據(jù)源名稱,并單擊“選擇”按鈕,在出現(xiàn)的對(duì)話框中找到自己需要的數(shù)據(jù)庫(kù);(5)單擊“確定”按鈕后,可以看到在“系統(tǒng)DSN”選項(xiàng)卡中已出現(xiàn)了數(shù)據(jù)源名稱。再次單擊“確定”按鈕,完成數(shù)據(jù)源的安裝。設(shè)置數(shù)據(jù)源的步驟9.2ADO基本結(jié)構(gòu)

ADO是一個(gè)面向?qū)ο蟮膽?yīng)用程序的接口,ADO提供若干對(duì)象,每個(gè)對(duì)象都有相應(yīng)的方法和屬性,通過(guò)這些對(duì)象來(lái)實(shí)現(xiàn)各種功能。除了完成和實(shí)際數(shù)據(jù)庫(kù)的連接之外,還可以對(duì)保存在Rcordset對(duì)象中的數(shù)據(jù)源進(jìn)行移動(dòng)、更新、添加、刪除、查詢、篩選和排序等操作。其實(shí)對(duì)初學(xué)者來(lái)講,沒(méi)必要去研究ADO的深層概念或技術(shù),只要掌握ADO可以使開(kāi)發(fā)者輕松使用數(shù)據(jù)庫(kù),并可以在客戶端實(shí)時(shí)更新數(shù)據(jù)顯示就可以了。

ADO有3個(gè)主要的對(duì)象,分別為Connection、Command和Recordset。其中,Connection對(duì)象用來(lái)建立與數(shù)據(jù)庫(kù)的連接;Command對(duì)象用來(lái)對(duì)數(shù)據(jù)庫(kù)執(zhí)行查詢、修改、刪除等命令;Recordset對(duì)象用來(lái)得到從數(shù)據(jù)庫(kù)中返回的記錄集。9.3Connection對(duì)象

使用ADO進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)庫(kù)程序設(shè)計(jì)時(shí),先使用Connection對(duì)象和數(shù)據(jù)源鏈接,通過(guò)Command對(duì)象傳遞指定的SQL命令,如對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)移動(dòng)、更新、添加、刪除、查詢、篩選和排序。Recordset對(duì)象就像是一個(gè)二維數(shù)組,數(shù)組的行代表數(shù)據(jù)表的一個(gè)記錄,一列表示一個(gè)字段。Connection對(duì)象是用來(lái)連接數(shù)據(jù)庫(kù)的。使用Connection對(duì)象之前,要建立Connection對(duì)象。9.3.1建立Connection對(duì)象

建立Connection對(duì)象的一個(gè)實(shí)例方法很簡(jiǎn)單,可以通過(guò)Server對(duì)象的CreateObject方法完成。使用語(yǔ)法為:SetConnection對(duì)象=Server.CreatObject("ADODB.Connection")建立對(duì)象實(shí)例后,就可以使用Connection對(duì)象的Open方法來(lái)打開(kāi)數(shù)據(jù)庫(kù)并與之建立連接了。使用Open方法打開(kāi)數(shù)據(jù)庫(kù)Connection對(duì)象的方法主要用來(lái)初始化一個(gè)連接,使用Open方法可以打開(kāi)一個(gè)數(shù)據(jù)庫(kù),使用語(yǔ)法為:Connection對(duì)象.Open"參數(shù)1=參數(shù)1的值;參數(shù)2=參數(shù)2的值;…"其中可以使用的參數(shù)及其意義為:·Dsn:ODBC數(shù)據(jù)源的名稱;·User:數(shù)據(jù)庫(kù)登錄帳號(hào);·Password:數(shù)據(jù)庫(kù)登錄密碼;·Driver:數(shù)據(jù)庫(kù)的類型或者說(shuō)驅(qū)動(dòng)程序;·Dbp:數(shù)據(jù)庫(kù)的物理路徑;·Provider:數(shù)據(jù)提供者。9.3.2連接數(shù)據(jù)庫(kù)

我們先聲明一個(gè)實(shí)例變量,再利用Server對(duì)象的CreatObject方法,建立一個(gè)數(shù)據(jù)庫(kù)存取組件的Connection對(duì)象實(shí)例。然后就可以打開(kāi)我們建立的數(shù)據(jù)源db了。例如:<%Dimdbxs

Setdbxs=Server.CreatObject("ADODB.Connection")Db1.Open"Dsn=db“%>1.利用數(shù)據(jù)源的方法連接數(shù)據(jù)庫(kù)利用數(shù)據(jù)源的方法連接數(shù)據(jù)庫(kù)有時(shí)候,這里的Dsn也可以省略,直接寫(xiě)數(shù)據(jù)源名稱。例如:<%DimdbxsSetdbxs=Server.CreatObject("ADODB.Connection")Db1.Open"db"%>使用數(shù)據(jù)源的方法盡管簡(jiǎn)單,但是需要在服務(wù)器上設(shè)置數(shù)據(jù)源,如果希望把一個(gè)程序移植到另一個(gè)服務(wù)器上時(shí),還需要在另一個(gè)服務(wù)器上設(shè)置數(shù)據(jù)源,就比較麻煩了。下面我們講解一下不用數(shù)據(jù)源的數(shù)據(jù)庫(kù)連接方法。<%Dimdbxs

Setdbxs=Server.CreateObject("ADODB.Connection")Db1.Open"Dbq=D:\network\xsgl.mdb;'描述數(shù)據(jù)庫(kù)文件的物理路徑Driver={MicrosoftAccessDriver(*.mdb)}"'指定數(shù)據(jù)庫(kù)的類型,和前一項(xiàng)之間用分號(hào)隔開(kāi)%>2.不利用數(shù)據(jù)源的方法連接數(shù)據(jù)庫(kù)實(shí)際上,在編程中,我們也可以利用Server對(duì)象的Mappath方法把數(shù)據(jù)庫(kù)的物理路徑給隱蔽起來(lái),因?yàn)樵摲椒梢詫⑻摂M路徑轉(zhuǎn)換為物理路徑。如:<%Dimdbxs

Setdbxs=Server.CreateObject("ADODB.Connection")Db1.Open"Dbq="&Server.Mappath("xsgl.mdb")&";Driver={MicrosoftAccessDriver(*.mdb)}"%>

這樣改寫(xiě)后帶來(lái)的好處就是,如果我們將程序從一個(gè)服務(wù)器移植到另一個(gè)服務(wù)器上時(shí),既不需要重新設(shè)置數(shù)據(jù)源,也不需要修改數(shù)據(jù)庫(kù)文件的物理路徑。不利用數(shù)據(jù)源的方法連接數(shù)據(jù)庫(kù)8.3.3Connection對(duì)象的方法

Connection對(duì)象的方法有很多,其中最常用的是Open方法和Excute方法。(1)Open方法Open方法用來(lái)打開(kāi)一個(gè)對(duì)象與數(shù)據(jù)源的連接。在ASP中,只有用Open方法打開(kāi)和數(shù)據(jù)庫(kù)的連接后,應(yīng)用程序才可以繼續(xù)進(jìn)行其他的各種操作。(2)Close方法Close方法用來(lái)關(guān)閉一個(gè)Connection對(duì)象與數(shù)據(jù)源的連接。(3)Execute方法Execute方法用來(lái)執(zhí)行數(shù)據(jù)庫(kù)查詢命令,它的用法有兩種:SetRecordset對(duì)象=Connection對(duì)象.Execute(SQL命令字符串)或Connection對(duì)象.Execute(SQL命令字符串)

說(shuō)明:第一種方法將返回一個(gè)Recordset對(duì)象,即記錄集,也可以看成是一個(gè)虛擬的數(shù)據(jù)表。第二種方法不返回記錄集。當(dāng)對(duì)數(shù)據(jù)庫(kù)查詢記錄時(shí)需要用到記錄集,一般用第一種方法;而執(zhí)行添加、刪除和更新等操作時(shí),沒(méi)必要返回記錄集,一般采用第二種方法。詳細(xì)情況請(qǐng)看例1、例2、例3、例4。<%OptionExplicit%><html><head> <title>利用Select語(yǔ)句查詢記錄示例</title></head><body> <h2align="center">學(xué)生基本情況瀏覽</h2> <% '以下連接數(shù)據(jù)庫(kù),建立一個(gè)Connection對(duì)象實(shí)例dbxs Dimdbxs

Setdbxs=Server.CreateObject("ADODB.Connection")

dbxs.Open"db"'利用數(shù)據(jù)源連接數(shù)據(jù)庫(kù)

'以下建立記錄集

DimstrSql,rs

strSql="Select*FromxsdaOrderBy學(xué)號(hào)"'按升序排列顯示所有記錄

Setrs=dbxs.Execute(strSql) %> <tableborder="1"align="center"><tr> <tdalign="center">學(xué)號(hào)</td> <tdalign="center">姓名</td> <tdalign="center">性別</td> <tdalign="center">民族</td> <tdalign="center">入學(xué)日期</td> <tdalign="center">年齡</td> <tdalign="center">特長(zhǎng)</td> <tdalign="center">聯(lián)系電話</td></tr><% '以下顯示數(shù)據(jù)庫(kù)記錄

DoWhileNotrs.Eof'只要不是結(jié)尾就執(zhí)行循環(huán)%> <tr> <tdalign="center"><%=rs("學(xué)號(hào)")%></td> <tdalign="center"><%=rs("姓名")%></td> <tdalign="center"><%=rs("性別")%></td> <tdalign="center"><%=rs("民族")%></td> <tdalign="center"><%=rs("入學(xué)日期")%></td> <tdalign="center"><%=rs("年齡")%></td> <tdalign="center"><%=rs("特長(zhǎng)")%></td> <tdalign="center"><%=rs("聯(lián)系電話")%></td> </tr> <%rs.MoveNext'將記錄指針移動(dòng)到下一條記錄

Loop%></table></body></html>例8-1程序運(yùn)行結(jié)果如下圖所示(4)BeginTrans方法BeginTrans方法用于開(kāi)始一個(gè)事務(wù)處理。所謂事務(wù)實(shí)際上是用戶人為定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,這些操作要么全做,要么全不做,是一個(gè)不可分割的邏輯工作單位。例如:在銀行應(yīng)用中,要求將用戶A帳戶中的1萬(wàn)元錢轉(zhuǎn)移到用戶B的帳戶上。這個(gè)操作要求從用戶A的帳戶中減掉1萬(wàn)元,在用戶B的帳戶中增加1萬(wàn)元。銀行的業(yè)務(wù)規(guī)則要求增加1萬(wàn)元和減少1萬(wàn)元這兩個(gè)操作要么全做,要么一個(gè)也不做。Connection對(duì)象的方法(5)Committrans方法只有執(zhí)行Committrans方法后,才會(huì)提交事務(wù)處理,結(jié)束一個(gè)事務(wù)處理。將所欲更新的數(shù)據(jù)庫(kù)數(shù)據(jù)立即更新。(6)RollbackTrans方法RollbackTrans方法用于取消事務(wù)處理,并放棄保存在緩沖區(qū)中的數(shù)據(jù)庫(kù)更新數(shù)據(jù)?!祭?.5〗事務(wù)應(yīng)用舉例。從用戶張三帳號(hào)上取1000元錢,轉(zhuǎn)到用戶李四的帳號(hào)中。<% OnErrorResumeNext'如果發(fā)生錯(cuò)誤,跳過(guò)執(zhí)行下一句

Dimdb,Conn

Conn="Dbq="&Server.Mappath("Money_Users.mdb")&";Driver={MicrosoftAccessDriver(*.mdb)}" Setdb=Server.CreateObject("ADODB.Connection") db.OpenConn

db.BeginTrans'開(kāi)始事務(wù)處理

'修改張三的余額,從其帳戶中取出1000元錢

strSql="UpdateMoneyset余額=余額-1000Wherename='張三'"

db.Execute(strSql) '修改李四的余額,往其帳戶中增加1000元錢

strSql="UpdateMoneyset余額=余額+1000Wherename='李四'" db.Execute(strSql)Ifdb.Errors.Count=0Then'如果無(wú)錯(cuò)誤,就執(zhí)行提交事務(wù)處理結(jié)果

Db.CommitTrans

Response.Write"成功執(zhí)行" Else

Db.RollbackTrans'如果有錯(cuò)誤,則取消事務(wù)處理結(jié)果

Response.Write"有錯(cuò)誤發(fā)生,取消處理結(jié)果" EndIf %>9.3.5Errors集合

在Connection對(duì)象中,有一個(gè)Errors集合,集合中包含了Error子對(duì)象。

ADO對(duì)象的操作也會(huì)產(chǎn)生一個(gè)或多個(gè)錯(cuò)誤。每個(gè)錯(cuò)誤出現(xiàn)時(shí),一個(gè)或多個(gè)Error對(duì)象將被放到Connection對(duì)象的Errors集合中。當(dāng)另一個(gè)ADO操作產(chǎn)生錯(cuò)誤時(shí),Errors集合將被清空,并在其中放入新的Error對(duì)象集。所以要及時(shí)地訪問(wèn)這個(gè)錯(cuò)誤的集合,以便需要的時(shí)候?qū)﹀e(cuò)誤進(jìn)行更正。

Errors集合有一個(gè)Count屬性,該屬性返回錯(cuò)誤集合中Error對(duì)象的個(gè)數(shù)。如果想知道有沒(méi)有錯(cuò)誤發(fā)生的時(shí)候,我們可以判斷Count的值是否等于0就可以了:Count等于0,表示沒(méi)有錯(cuò)誤發(fā)生;Count大于0,則表示有錯(cuò)誤發(fā)生。〖例9.6〗error對(duì)象應(yīng)用舉例

<%Dimdb OnErrorResumeNext'一定要有此語(yǔ)句,發(fā)生錯(cuò)誤后,繼續(xù)執(zhí)行下一句

Setdb=Server.CreateObject("ADODB.Connection") '建立Connection對(duì)象

db.Open"Dsn=dberror"'故意給一個(gè)錯(cuò)誤的數(shù)據(jù)源

'用一個(gè)循環(huán)將所有錯(cuò)誤信息輸出

DimI,err ForI=0Todb.Errors.Count-1'循環(huán)輸出所有的錯(cuò)誤對(duì)象

Seterr=db.Errors.Item(I)'建立Error對(duì)象err

Response.Write"錯(cuò)誤編號(hào):"&err.Number&"<br>"

Response.Write"錯(cuò)誤描述:"&err.Description&"<br>"

Response.Write"錯(cuò)誤原因:"&err.Source&"<br>"

Response.Write"提示文字:"&err.HelpContext&"<br>"

Response.Write"幫助文件:"&err.HelpFile&"<br>"

Response.Write"原始錯(cuò)誤:"&err.NativeError&"<br>" Next %>程序程序結(jié)果如下圖所示:9.4Recordset對(duì)象

Recordset對(duì)象又稱記錄集對(duì)象,當(dāng)用Connection對(duì)象或Command對(duì)象執(zhí)行查詢命令后,就會(huì)得到一個(gè)記錄集對(duì)象。該對(duì)象包含了滿足條件的所有記錄,就像一個(gè)二維表一樣,可以利用ASP語(yǔ)句操作顯示其中的記錄數(shù)據(jù)。9.4.1創(chuàng)建Recordset對(duì)象

(1)利用Connection對(duì)象的Excute方法建立Recordset對(duì)象<%Dimdbxs,rsSetdbxs=Server.CreateObject("ADODB.Connection")dbxs.Open"Dsn=db"Setrs=dbxs.Excute("Select*fromxsda")%>(2)用標(biāo)準(zhǔn)方法建立Recordset對(duì)象語(yǔ)法:SetRecordset對(duì)象=Server.CreateObject("ADODB.Recordset")然后利用Recordset對(duì)象的Open方法打開(kāi)一個(gè)數(shù)據(jù)庫(kù):Recordset對(duì)象.Open[Source][,ActiveConnection][,CursorType][,LockType][,Options]說(shuō)明:lSoruce:Command對(duì)象名或SQL語(yǔ)句或數(shù)據(jù)表名;l

ActiveConnection:Connection對(duì)象名或數(shù)據(jù)庫(kù)連接字符串;l

CursorType:Recordset對(duì)象記錄集中的指針類型;l

LockType:Recordset對(duì)象的使用類型;lOptions:Source類型。9.4.2Recordset對(duì)象的常用屬性1.方式屬性Recordset對(duì)象的方式屬性有Source、ActiveConnection等,前面已有介紹,這里不做重復(fù)說(shuō)明。2.行為屬性(1)CursorType屬性它返回當(dāng)前記錄集使用的指針類型,也可以由我們給當(dāng)前記錄集設(shè)置一個(gè)指針類型。該屬性的取值如下:lAdOpenForwardOnly或0:指針只能向前移動(dòng),其他人做的修改不可見(jiàn)。lAdOpenKeyset或1:鍵盤指針,指針可向前、向后移動(dòng),其它人對(duì)數(shù)據(jù)的修改和刪除是可見(jiàn)的,但添加的數(shù)據(jù)是不可見(jiàn)的。

AdOpenDynamic或2:動(dòng)態(tài)指針類型,其它人的修改是可見(jiàn)的,可以向前和向后移動(dòng)指針。lAdOpenStatic或3:靜態(tài)指針類型,其它人的修改是不可見(jiàn)的,但可以向前和向后移動(dòng)指針。2.行為屬性(2)Filter屬性該屬性用來(lái)過(guò)濾當(dāng)前記錄集中的記錄,它的值可以取常量,也可以取字符串值。當(dāng)它取字符串值時(shí),相當(dāng)于SQL的Select語(yǔ)句中的Where后面的條件,可以是任何表達(dá)式。當(dāng)它取常量時(shí)是下面的值之一:l

AdFilterNone或0:當(dāng)前的任何過(guò)濾條件都被取消,顯示所有數(shù)據(jù)。l

AdFilterPendingrecords或1:只返回沒(méi)有經(jīng)過(guò)修改的數(shù)據(jù)。l

AdFilterAffectrecords或2:只返回最近修改過(guò)的數(shù)據(jù)。AdFilterFetchedrecords或3:只返回暫存于客戶端緩存中的數(shù)據(jù)。這里我們介紹一個(gè)Status屬性,該屬性是用來(lái)檢測(cè)當(dāng)前的記錄狀態(tài)的,這個(gè)屬性是只讀的。它的取值如下:lAdRecOk:表示記錄修改成功。lAdRecNew:

表示這是一個(gè)新記錄。lAdRecModified:記錄被修改。l

AdRecDeleted:

記錄被刪除。l

AdRecUnModified:記錄未被修改。lAdRecPendingChanges:因?yàn)橛袙炱鸬牟迦氩僮?,記錄未被稱為保存。lAdRecCantRelease:

因?yàn)榧渔i,所以記錄不能更新?lián)Q代。l

AdRecPermissionDenied:由于用戶權(quán)限不允許修改記錄。l

AdRecSchemaviolation:

因結(jié)構(gòu)不符,不能更新記錄。該屬性可以在實(shí)施一次批量更新后,查詢Recordset對(duì)象的狀態(tài)。

3.數(shù)據(jù)庫(kù)維護(hù)屬性(1)RecordCount該屬性返回記錄集中的記錄總數(shù)。如輸出數(shù)據(jù)表中記錄個(gè)數(shù):<%Response.writers.RecordCount%>注意:使用該屬性需要把指針類型CursorType屬性設(shè)置為1或3,否則會(huì)出錯(cuò)。(2)Bof該屬性返回記錄指針是否在記錄集的開(kāi)頭,即第一條記錄之前。如是則返回true,否則返回False。(3)Eof該屬性返回記錄指針是否在記錄集的結(jié)尾,即最后一條記錄之后。如是則返回true,否則返回False。注意:如果數(shù)據(jù)表是空的,此時(shí)記錄指針同時(shí)指向Bof和Eof,即它們的值同時(shí)是True。4.記錄指針移動(dòng)屬性在顯示數(shù)據(jù)庫(kù)記錄時(shí),我們經(jīng)常用到這兩個(gè)屬性,如:<%Dowhilenotrs.Eof……rs.MoveNextLoop%>記錄指針移動(dòng)屬性這一組屬性主要用來(lái)完成數(shù)據(jù)分頁(yè)顯示的功能。其中PageSize用于設(shè)置每一頁(yè)的記錄數(shù);PageCount表示分頁(yè)顯示時(shí)數(shù)據(jù)頁(yè)的總數(shù);AbsolutePage用于設(shè)置當(dāng)前指針位于哪一頁(yè);AbsolutePosition用于設(shè)置當(dāng)前指針?biāo)诘挠涗浶械慕^對(duì)值。具體情況請(qǐng)看教材例題8.7。(4)PageSize、PageCount、AbsolutePage和AbsolutePosition屬性AddNew:向數(shù)據(jù)庫(kù)中添加一個(gè)新記錄。使用語(yǔ)法:rs.AddNew

([Fields,Values])Delete:該方法用于刪除當(dāng)前記錄。Update:該方法用于更新數(shù)據(jù)庫(kù)數(shù)據(jù)。執(zhí)行完AddNew或Delete方法后,必須執(zhí)行Update方法,才能真正地更新了數(shù)據(jù)庫(kù)。實(shí)際上,也可以直接用Update方法更新數(shù)據(jù):<%……

rs.UpdateFields,Values……%>直接更新時(shí),Update的參數(shù)和AddNew方法是一樣的。CancelUpdate:該方法的作用是取消剛才的更新操作。即取消在調(diào)用Update方法前所做的一切修改。這兩個(gè)方法一個(gè)是更新數(shù)據(jù),一個(gè)是取消更新。前者是對(duì)所做的修改保存,而后者是從緩沖區(qū)中除掉數(shù)據(jù),取消更新。9.5Command對(duì)象

學(xué)習(xí)了Connection對(duì)象和Recordset對(duì)象之后,我們已經(jīng)掌握了對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢和更新操作的編程技術(shù)。但是,這種訪問(wèn)方式對(duì)相對(duì)簡(jiǎn)單的SQL命令是可以滿足需要的,對(duì)一些復(fù)雜的數(shù)據(jù)庫(kù)訪問(wèn)要求,就顯得力不從心了。Command對(duì)象在數(shù)據(jù)查詢方面具有強(qiáng)大的功能,它不僅能夠?qū)⒁话愕腟QL命令送往Web數(shù)據(jù)庫(kù)服務(wù)器,還能夠傳送帶有參數(shù)的SQL命令,可以開(kāi)發(fā)出更具效率的數(shù)據(jù)庫(kù)應(yīng)用網(wǎng)頁(yè)。9.5.1建立Command對(duì)象

Command對(duì)象是介于Connection對(duì)象和Recordset對(duì)象之間的一個(gè)對(duì)象,它主要是通過(guò)傳遞SQL指令,對(duì)數(shù)據(jù)庫(kù)提出操作請(qǐng)求,把得到的結(jié)果返回給Recordset對(duì)象。Command對(duì)象依賴Connection對(duì)象,因?yàn)镃ommand對(duì)象必須經(jīng)過(guò)一個(gè)已經(jīng)建立的Connection對(duì)象才能發(fā)出指令。建立Command對(duì)象很容易,語(yǔ)法如下:SetCommand對(duì)象=Server.CreateObject("ADODB.Command")然后用ActiveConnection屬性指定要用的Connection對(duì)象名稱,語(yǔ)法如下:Command對(duì)象.ActiveConnection=Connection對(duì)象例如:<%Dimdbxs,cmdSetdbxs=Server.CreateObject("ADODB.Connection")dbxs.Open"db"Setcmd=Server.CreateObject("ADODB.Command")cmd.ActiveConnection=dbxs%>也可以直接建立Command對(duì)象,不用事先建立Connection對(duì)象,而是隱含建立:<%DimcmdSetcmd=Server.CreateObject("ADODB.Command")cmd.ActiveConnection="db"%>建立Command對(duì)象

Command對(duì)象有以下常用屬性:(1)ActiveConnectionActiveConnection屬性用于指定Connection連接對(duì)象,表示該Command對(duì)象通過(guò)哪個(gè)Connection對(duì)象對(duì)數(shù)據(jù)庫(kù)操作。我們?cè)谇懊嬉呀?jīng)用過(guò)了,不再綴述。(2)CommandTextCommandText屬性表示一個(gè)查詢字符串。它可以是一個(gè)SQL命令、數(shù)據(jù)庫(kù)表或者子程序名,其類型由CommandType屬性決定。9.5.2

Command對(duì)象的屬性(3)CommandType該屬性用來(lái)設(shè)置Command對(duì)象查詢信息的類型。類型值有:lAdCmdUnknown或-1:默認(rèn)值,CommandText屬性的命令類型未知,需要由程序來(lái)決定。lAdCmdText或1:CommandText命令的是SQL語(yǔ)句。lAdCmdTable或2:CommandText查詢字符串是數(shù)據(jù)表名。lAdCmdStoredProc或4:CommandText查詢字符串是查詢名或存儲(chǔ)過(guò)程。(4)CommandTimeout該屬性指定在執(zhí)行數(shù)據(jù)查詢的最長(zhǎng)執(zhí)行時(shí)間。默認(rèn)值為30秒,如果設(shè)置為0,則表示永久執(zhí)行,直至執(zhí)行成功。Command對(duì)象的屬性

Execute方法用來(lái)執(zhí)行在CommandText屬性中定義好的查詢、SQL語(yǔ)句或存儲(chǔ)過(guò)程,包括查詢記錄、添加、刪除和更新等各種操作。使用語(yǔ)法:(1)需要返回記錄集:SetRecordset對(duì)象=Command對(duì)象.Execute([Count][,Parameters][,Options])(2)不需要返回記錄集:Command對(duì)象.Execute([Count][,Parameters][,Options])說(shuō)明:l

Count,可選項(xiàng),返回該操作影響的記錄的數(shù)量。l

Parameters,可選項(xiàng),包含被SQL語(yǔ)句傳遞的參數(shù)值。lOptions可選項(xiàng),指定Command對(duì)象的CommandType屬性。9.5.3Command對(duì)象的方法1.

Execute方法例如:<%……Setcmd=Server.CreateObject("ADODB.Command")cmd.ActiveConnection=dbxscmd.CommandText="Select*fromxsda"cmd.CommandType=1'指定命令類型為SQL語(yǔ)句Setrs=cmd.Excute'沒(méi)有加參數(shù)……%>再如:<%cmd.CommandText="Delete*fromxsda"Setrs=cmd.Excute

(count,,1)'加上參數(shù)Response.Write"共刪除"&count&"條記錄"%>Execute方法Command對(duì)象有兩個(gè)集合:Parameters和Properties。Parameters集合也稱為參數(shù)集合,是由若干個(gè)Parameter對(duì)象組成。CreateParameter方法用指定的屬性創(chuàng)建一個(gè)新的Parameter對(duì)象(參數(shù)對(duì)象)。該對(duì)象主要是在進(jìn)行參數(shù)查詢時(shí)使用。Setparameter=command.CreateParameter(Name,Type,Direction,Size,Value)返回值:返回一個(gè)Parameter對(duì)象。說(shuō)明:l

Name:可選,一個(gè)代表Parameter對(duì)象的名字的字符串。l

Type:可選,確定Parameter對(duì)象的數(shù)據(jù)類型。lDirection:可選,確定Parameter對(duì)象的類型。lSize:可選,確定參數(shù)值的最大長(zhǎng)度,單位為字符或字節(jié)。lValue|varValue:可選,一個(gè)Variant值,指示Parameter對(duì)象的值。CreateParameter方法的具體用法請(qǐng)參考有關(guān)資料,這里不再展開(kāi)介紹。2.CreateParameter方法9.6訪問(wèn)SQLServer數(shù)據(jù)庫(kù)訪問(wèn)SQLServer數(shù)據(jù)庫(kù)其實(shí)和訪問(wèn)Access數(shù)據(jù)庫(kù)的方法是一樣的,只是在連接數(shù)據(jù)庫(kù)時(shí)有些許差別。假如我們已經(jīng)建立了SQL數(shù)據(jù)庫(kù)RSGL(人事管理),訪問(wèn)此SQL數(shù)據(jù)庫(kù)需要的帳號(hào)和密碼分別為Admin、test123,并且

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論