




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第十章 Asp訪問(wèn)SQL Server數(shù)據(jù)庫(kù)n在ASP中,用來(lái)存取數(shù)據(jù)庫(kù)的對(duì)象統(tǒng)稱為ADO(ActiveX Data Object),主要含有Connection、Recordset和Command三種對(duì)象。qConnection對(duì)象:負(fù)責(zé)連接、打開(kāi)數(shù)據(jù)庫(kù)qRecordset對(duì)象:存取數(shù)據(jù)庫(kù)的內(nèi)容qCommand對(duì)象:對(duì)數(shù)據(jù)庫(kù)下達(dá)行動(dòng)查詢指令10-1 存取數(shù)據(jù)庫(kù)的準(zhǔn)備工作n要讓ADO對(duì)象能夠存取數(shù)據(jù)庫(kù),最重要的東西就是ODBC驅(qū)動(dòng)程序。nODBC:Open DataBase Connectivityn對(duì)任何一種數(shù)據(jù)庫(kù)來(lái)說(shuō),必須具備其對(duì)應(yīng)的ODBC驅(qū)動(dòng)程序,ADO對(duì)象才能夠進(jìn)行存取。應(yīng)用程序應(yīng)用
2、程序應(yīng)用程序ADO對(duì)象Dbase驅(qū)動(dòng)程序Access驅(qū)動(dòng)程序SQL Server驅(qū)動(dòng)程序Dbase數(shù)據(jù)庫(kù)Access數(shù)據(jù)庫(kù)SQL Server數(shù)據(jù)庫(kù)1.ODBC數(shù)據(jù)源管理器n控制面板管理工具ODBC數(shù)據(jù)源驅(qū)動(dòng)程序2.Connection對(duì)象的建立與數(shù)據(jù)庫(kù)的連接建立Connection對(duì)象nset conn=server.createobject(adodb.connection)nconn.Open driver=SQL Server;server=(local);uid=sa;pwd=;database=samplen3.訪問(wèn)數(shù)據(jù)庫(kù)建立Recordset對(duì)象nset rs=server.cr
3、eateobject(adodb.recordset)打開(kāi)數(shù)據(jù)表,參數(shù)二為Connection對(duì)象nrs.open 成績(jī)單,conn,cursor,locktypecursor為游標(biāo)參數(shù),實(shí)際應(yīng)用中的值為1、2、3 cursortypen0 :adOpenForwardOnly,缺省值,啟動(dòng)一個(gè)只能向前移動(dòng)的游標(biāo)(Forward Only)。n1:adOpenKeyset,啟動(dòng)一個(gè)Keyset類型的游標(biāo)。用戶對(duì)記錄做的修改將反映到記錄集中,但用戶增加或刪除記錄不會(huì)反映到記錄集中。支持分頁(yè) n2:adOpenDynamic,啟動(dòng)一個(gè)Dynamic類型的游標(biāo)。在打開(kāi)數(shù)據(jù)表時(shí),只是打開(kāi)一部分記錄,隨
4、著程序的執(zhí)行,再打開(kāi)后面的記錄;n3:adOpenStatic,啟動(dòng)一個(gè)Static類型的游標(biāo)。具有定位功能的,一次打開(kāi)全部記錄,所占的內(nèi)存較多,浪費(fèi)系統(tǒng)資源,打開(kāi)數(shù)據(jù)表時(shí)間也相對(duì)較長(zhǎng) locktypen1:adLockReadOnly,缺省值,Recordset對(duì)象以只讀方式啟動(dòng),無(wú)法運(yùn)行AddNew、Update及Delete等方法n2:adLockPrssimistic,當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)會(huì)暫時(shí)鎖住其他用戶的動(dòng)作,以保持?jǐn)?shù)據(jù)一致性。n3:adLockOptimistic,當(dāng)數(shù)據(jù)源正在更新時(shí),系統(tǒng)并不會(huì)鎖住其他用戶的動(dòng)作,其他用戶可以對(duì)數(shù)據(jù)進(jìn)行增、刪、改的操作。5.數(shù)據(jù)庫(kù)連接的關(guān)閉n
5、在對(duì)數(shù)據(jù)庫(kù)所有的操作完畢后,應(yīng)當(dāng)及時(shí)關(guān)閉connection對(duì)象,釋放資源nConn.closenSet conn=nothingnSet rs=nothing10-2 使用Recordset對(duì)象讀取數(shù)據(jù)庫(kù)n讀取數(shù)據(jù)表表頭n讀取數(shù)據(jù)內(nèi)容 n改變當(dāng)前數(shù)據(jù)記錄的方法 n利用字段名稱讀取數(shù)據(jù)n例子:first00.asp改進(jìn):讀取數(shù)據(jù)表表頭n第N個(gè)字段的表頭為rs(N).Name(N從0開(kāi)始算起)n% For i = 0 to 4 Response.Write & rs(i).Name Next %n例:first01.aspn在不知道表的字段個(gè)數(shù)情況下,如何正確的列出所有字段的表頭呢?rs
6、.fields.count:讀取字段個(gè)數(shù)For i=0 to rs.fields.count-1n例:First02.asp讀取數(shù)據(jù)內(nèi)容n當(dāng)打開(kāi)某一個(gè)數(shù)據(jù)表時(shí),當(dāng)前數(shù)據(jù)記錄位于第一項(xiàng)的位置,此時(shí)只能讀取這個(gè)數(shù)據(jù)記錄的數(shù)據(jù),數(shù)據(jù)表示方法如下圖rs(0)表示當(dāng)前數(shù)據(jù)記錄的第一項(xiàng)數(shù)據(jù),第N項(xiàng)數(shù)據(jù)為rs(N),N從0開(kāi)始 n讀取數(shù)據(jù)的方法: %For i= 0 to rs.Fields.Count - 1 Response.Write & rs(i).Name & = & rs(i)Next%n說(shuō)明:說(shuō)明:(1)rs(i).Name:讀取第i欄的字段表頭(i從從0開(kāi)始)開(kāi)始)
7、(2)rs(i):讀取當(dāng)前數(shù)據(jù)記錄第i欄的數(shù)據(jù)內(nèi)容(i從從0開(kāi)始)開(kāi)始) (3)rs.fields.count:讀取字段的數(shù)目 n例:first03.asp改變當(dāng)前數(shù)據(jù)記錄的方法nMoveNext方法:將當(dāng)前數(shù)據(jù)記錄移到下一項(xiàng)。nMovePrevious:移到上一項(xiàng)nMoveFirst:移到第一項(xiàng)nMoveLast:移到最后一項(xiàng)nBOF屬性:若為True,表示當(dāng)前數(shù)據(jù)記錄指針超過(guò)了第一項(xiàng)數(shù)據(jù)記錄nEOF:若為True,表示當(dāng)前數(shù)據(jù)記錄指針超過(guò)了最后一項(xiàng)數(shù)據(jù)記錄n例子:Firstdb.aspn % Part I輸出“表頭名稱” For i=0 to rs.Fields.Count-1 Respo
8、nse.Write & rs(i).Name & Next % % Part II輸出數(shù)據(jù)表的“內(nèi)容” rs.MoveFirst 將目前的數(shù)據(jù)記錄移到第一項(xiàng) While Not rs.EOF 判斷是否過(guò)了最后一項(xiàng) Row = For i=0 to rs.Fields.Count-1 Row = Row & & rs(i) & Next Response.Write Row & rs.MoveNext 移到下一項(xiàng) Wend %使用字段名稱讀取數(shù)據(jù)nrs(“字段名稱”)練習(xí)n練習(xí)練習(xí)1:寫(xiě)一網(wǎng)頁(yè),打開(kāi)sample.mdb數(shù)據(jù)庫(kù)的“股票行情表”,要求只
9、列出“成交量”大于20000的數(shù)據(jù)記錄。n練習(xí)練習(xí)2:寫(xiě)一網(wǎng)頁(yè),打開(kāi)sample.mdb數(shù)據(jù)庫(kù)的“成績(jī)單”數(shù)據(jù)表,除了顯示“學(xué)號(hào)、姓名、語(yǔ)文、數(shù)學(xué)、英文”字段外,還要計(jì)算“語(yǔ)文、數(shù)學(xué)、英文”三科的總分?jǐn)?shù)線,顯示成“總成績(jī)字段”。 10-3 定位式的數(shù)據(jù)讀取n要讀取第100項(xiàng)數(shù)據(jù),怎么辦?設(shè)置AbsolutePosition屬性:rs.absoluteposition=100n定位功能實(shí)現(xiàn):cursor類型設(shè)為3n3:adOpenStatic ,啟動(dòng)一個(gè)static類型的游標(biāo),具有定位功能的,一次打開(kāi)全部記錄,所占的內(nèi)存較多,浪費(fèi)系統(tǒng)資源,打開(kāi)數(shù)據(jù)表時(shí)間也相對(duì)較長(zhǎng)具備分頁(yè)瀏覽功能的網(wǎng)頁(yè)nPage
10、v1.asp:分頁(yè)的技巧nPagev2.asp:在地址欄中輸入頁(yè)次nPagev3.asp:頁(yè)次的瀏覽nPagev4.asp:增加“輸入頁(yè)次”字段分頁(yè)的幾個(gè)重要參數(shù)nrs.pagesize:每頁(yè)顯示的記錄數(shù)nRs.pagecount:總頁(yè)數(shù)nRs.absolutepage:某一頁(yè)P(yáng)agev1.aspn顯示記錄的某一頁(yè)Rs.pagesize=10ShowOnePage rs, 1nSub ShowOnePage( rs, Page )n Response.Write n Response.Write n Response.Write 編號(hào)編號(hào)n For i=0 to rs.Fields.Count
11、-1n Response.Write & rs(i).Name & n Nextn Response.Write n rs.AbsolutePage = Pagen For iPage = 1 To rs.PageSizen Response.Write n RecNo = (Page - 1) * rs.PageSize + iPagen Response.Write & RecNo & n For i=0 to rs.Fields.Count-1n Response.WRITE & rs(i) & n Nextn Response.Write
12、 n rs.MoveNextn If rs.EOF Then Exit Forn Nextn Response.Write nEnd SubPagev2.aspn可輸入頁(yè)碼的需要對(duì)獲取的頁(yè)數(shù)page轉(zhuǎn)換Page=request(“page”)If page” then Page = cint( Page) If Page rs.PageCount Then Page = rs.PageCountElse Page=1End ifPagev3.aspn對(duì)“上、下頁(yè)”的顯示方法Myself = Request.ServerVariables(PATH_INFO)%If Page 1 Then 如果
13、不是位于第一頁(yè)% A HREF=?Page=1第一頁(yè) A HREF=?Page=上一頁(yè)%End If If Page rs.PageCount Then 如果不是位于最后一頁(yè)% A HREF=?Page=下一頁(yè) A HREF=?Page=最后一頁(yè)P(yáng)agev4.aspn帶有輸入文本框的分頁(yè)FORM Action= Method=“GET”10-4 數(shù)據(jù)記錄的增添、刪除與修改n刪除數(shù)據(jù)記錄:首先要將準(zhǔn)備刪除的數(shù)據(jù)記錄設(shè)置成當(dāng)前數(shù)據(jù)記錄,然后調(diào)用rs.delete方法。例子:delete.aspn修改數(shù)據(jù)記錄:修改以后只是把數(shù)據(jù)寫(xiě)到了緩沖區(qū),必須調(diào)用Update方法或改變當(dāng)前數(shù)據(jù)記錄的位置才真正寫(xiě)入
14、數(shù)據(jù)庫(kù)。qrs.(字段名)=新的字段值rs.updaten例子:Modify.aspn增添數(shù)據(jù)記錄:rs.addnew。rs.addnewrs(字段名)=字段值rs.update n例子:addnew.asp10-5 可以進(jìn)行數(shù)據(jù)篩選與排序的Select指令nFirstdb.asp替換成select.asp。結(jié)果不變。nSQL是“Structured Query Language”結(jié)構(gòu)化查詢語(yǔ)言的縮寫(xiě),是用于對(duì)存放在計(jì)算機(jī)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行組織、管理和檢索的一種工具。n查詢是SQL語(yǔ)言的核心,而用于表達(dá)SQL查詢的Select語(yǔ)句則是功能最強(qiáng)也最為復(fù)雜的SQL語(yǔ)句。它從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù),并將查
15、詢結(jié)果提供給用戶。n使用testsel.asp測(cè)試select指令基本句型一:Select 字段列表 From 數(shù)據(jù)表nSelect * from 成績(jī)單注:其中*表示“成績(jī)單”數(shù)據(jù)表所有字段所構(gòu)成的列表,所以上面的指令也等于:nSelect 學(xué)號(hào),姓名,語(yǔ)文,英文,數(shù)學(xué) from 成績(jī)單注:凡是數(shù)據(jù)表中的字段都可以成為“字段列表”的一員。 字段的順序可以自定義,不必與數(shù)據(jù)表中的字段順序相同。nSelect 字段名1 As 別名1,字段名2 As 別名2 from 成績(jī)單nSelect 字段名1,字段名2,字段名1+字段名2 as 字段名3 from 成績(jī)單nSelect * from 成績(jī)單
16、 where 數(shù)學(xué)60注:從成績(jī)單中取出數(shù)學(xué)不及格的同學(xué)nSelect * from 成績(jī)單 where 語(yǔ)文=0 or 數(shù)學(xué)=0 or 英文=0注:取出語(yǔ)文、英文、數(shù)學(xué)任何一門為0分的學(xué)生?;揪湫投篠elect Fromwhere 條件式Where 條件表達(dá)式n關(guān)系運(yùn)算符:、關(guān)系運(yùn)算符:、=、!、!=(不等(不等于,或者用于,或者用“”表示)表示)n邏輯運(yùn)算符:邏輯運(yùn)算符:And、OR、NOTn特殊運(yùn)算符:特殊運(yùn)算符:q:通配符,表示零或多個(gè)字符:通配符,表示零或多個(gè)字符q_:通配符,表示任何一個(gè)字符:通配符,表示任何一個(gè)字符qBetween:定義一個(gè)區(qū)間范圍:定義一個(gè)區(qū)間范圍qIS N
17、ULL:測(cè)試字段值是否為空值:測(cè)試字段值是否為空值qLike:字符串匹配操作:字符串匹配操作qIN:檢查一個(gè)字段值是否屬于一組之中:檢查一個(gè)字段值是否屬于一組之中qExists:檢查一個(gè)字段值是否有值:檢查一個(gè)字段值是否有值n字符串?dāng)?shù)據(jù)字符串?dāng)?shù)據(jù) 下面下面2種寫(xiě)法都正確種寫(xiě)法都正確Select * from 成績(jī)單成績(jī)單 where 姓名姓名=“葉小毛葉小毛”Select * from 成績(jī)單成績(jī)單 where 姓名姓名=葉小毛葉小毛n通配符通配符 %、_%:代表:代表0N個(gè)字符個(gè)字符Select * from 成績(jī)單成績(jī)單 where 姓名姓名 like 王王%注:查找所有姓王的同學(xué)的數(shù)據(jù)記
18、錄。注:查找所有姓王的同學(xué)的數(shù)據(jù)記錄。Select * from 成績(jī)單成績(jī)單 where 姓名姓名 like %小小%注:查找姓名中含有注:查找姓名中含有“小小”的數(shù)據(jù)記錄。的數(shù)據(jù)記錄。_:代表一個(gè)字符:代表一個(gè)字符select * from 成績(jī)單成績(jī)單 where 姓名姓名 like _小小% 選取姓選取姓名中第二個(gè)字為名中第二個(gè)字為“小小”字的同學(xué)字的同學(xué)nBetween and Select * from 學(xué)生表 where 年齡 between 18 and 20注:列出年齡在18-20之間的學(xué)生思考:列出年齡不在18-20之間的學(xué)生?nIS NULLSelect 課程名 from
19、 課程表 where 先修課 IS NULL注:列出沒(méi)有先修課的課程名nINSelect 學(xué)號(hào),姓名,性別,院系 from 學(xué)生表 where 院系 IN (計(jì)算機(jī),國(guó)際貿(mào)易)注:列出計(jì)算機(jī)系和國(guó)際貿(mào)易系學(xué)生的學(xué)號(hào)、姓名、性別、院系如何列出不是電子系,也不是會(huì)計(jì)系的學(xué)生記錄?nDISTINCT的作用:避免重復(fù)的記錄n如:nSelect Distinct 教師名 from 授課表nSelect * from 成績(jī)單 order by 語(yǔ)文注:order by默認(rèn)的排序方式是由小到大。下面將成績(jī)單中的數(shù)據(jù)按語(yǔ)文成績(jī)由高到低取出:nSelect * from 成績(jī)單 order by 語(yǔ)文 desc
20、nSelect * from 成績(jī)單 where 語(yǔ)文60 order by 語(yǔ)文注:order by 可以和Where條件式結(jié)合,此時(shí),order by 必須放在where條件式的后面?;揪湫腿篠elect Fromorder by 字段列表n級(jí)聯(lián)排序:按順序列出字段的清單,字段之間用逗號(hào)隔開(kāi)nSelect 入學(xué)年份,學(xué)號(hào),姓名 from 學(xué)生表 order by 入學(xué)年份 desc, 學(xué)號(hào)在程序中組合條件式n以上所舉的都是“常數(shù)”例子,如果比較的數(shù)據(jù)是“變量”,那么如何做呢?nV=200 SQL=“select * from 股票行情表 where 收盤價(jià)V” set rs=serve
21、r.createobject(“adodb.recordset”) rs.open SQL,conn,3,2n結(jié)果是錯(cuò)誤的,因?yàn)閂對(duì)程序而言是一個(gè)變量,但是對(duì)于數(shù)據(jù)庫(kù)而言,卻是一個(gè)不認(rèn)識(shí)的東西。所以必須把V輸出為常數(shù),然后串在條件式中,才是正確的。n對(duì)于數(shù)字 例子:var1.aspqSQL=“select * from 股票行情表 where 收盤價(jià)”&Vn對(duì)于字符串 例子:var2.aspqSQL=“select * from 股票行情表 where 股票代號(hào)=”&V&”n對(duì)于日期時(shí)間 例子:var3.aspqSQL=“select * from 買賣記錄 where
22、 買賣日期=#”&V&”#”SQL的集合函數(shù)nCount:統(tǒng)計(jì)nMIN:求最小值nMAX:求最大值nAVG:求平均值nSUM:求總和COUNTn用作計(jì)數(shù)器,統(tǒng)計(jì)滿足條件的記錄數(shù)nSelect count(*) as 個(gè)數(shù) from 學(xué)生表 where 性別=女 and 年齡=19n注:統(tǒng)計(jì)19歲以上的女同學(xué)人數(shù)n練習(xí):列出授課表中有多少位教師nSelect count(Distinct 教師名) as 教師人數(shù) from 授課表n注意:與distinct合用MAX和MINn例:找出年齡最大和最小的學(xué)生年齡nSelect Max(年齡) as 最大年齡, Min(年齡) as 最小年齡 from 學(xué)生表n例:查詢選修“C801”課程的學(xué)生最高分nSelect Max(成績(jī)) as 最高分 from 成績(jī)表 where 課程號(hào)=C801AVG函數(shù)與SUM函數(shù)n例:求出所有學(xué)生的平均年齡nSelect AVG(年齡) as 平均年齡 from 學(xué)生表n例:列出所有學(xué)生的年齡總和nSelect SUM(年齡) as 年齡總和 from 學(xué)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)居民健康教育活動(dòng)實(shí)施方案
- 康寶萊體重管理課
- 【荊州】2025年湖北荊州市石首市企事業(yè)單位人才引進(jìn)170人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 小學(xué)一年級(jí)清廉教學(xué)課件
- 幼兒天氣教學(xué)課件
- 課件教學(xué)的問(wèn)題
- 整體護(hù)理課件
- 初中數(shù)學(xué)有效教學(xué)課件
- 散文文體介紹課件
- 教育政策學(xué)全套課件
- 16J916-1住宅排氣道一
- 四年級(jí)下冊(cè)數(shù)學(xué)期末測(cè)試試卷附完整答案【各地真題】
- 2024年省石棉縣人力資源和社會(huì)保障局關(guān)于公開(kāi)考核招考綜合類事業(yè)單位工作人員高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- JJG 971-2019液位計(jì)檢定規(guī)程
- 云南省楚雄州2022-2023學(xué)年高一下學(xué)期期末考試化學(xué)試題(解析版)
- 自動(dòng)售貨機(jī)投放方案
- 規(guī)范預(yù)防接種知情告知課件
- 2023陜西省中考英語(yǔ)真題試卷和答案
- 中國(guó)傳媒大學(xué)開(kāi)題報(bào)告模板
- 水電預(yù)埋預(yù)留培訓(xùn)課件
- 注塑車間工作總結(jié)計(jì)劃
評(píng)論
0/150
提交評(píng)論