Web開發(fā)實(shí)用技術(shù)Web應(yīng)用程序開發(fā)技術(shù).ppt
《Web開發(fā)實(shí)用技術(shù)Web應(yīng)用程序開發(fā)技術(shù).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Web開發(fā)實(shí)用技術(shù)Web應(yīng)用程序開發(fā)技術(shù).ppt(115頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第6章 NETWeb應(yīng)用程序開發(fā)技術(shù) 學(xué)習(xí)要點(diǎn) 1 掌握C 語(yǔ)言編程技術(shù)2 了解ASP NET的運(yùn)行模式3 熟悉ASP NET的服務(wù)器對(duì)象4 掌握ASP NET基本控件的使用5 學(xué)會(huì)配置Web config文件6 掌握ADO NET數(shù)據(jù)庫(kù)訪問技術(shù)7 學(xué)會(huì)使用VS2005創(chuàng)建Web服務(wù)8 掌握進(jìn)行 NET控件開發(fā)的技術(shù) NETWeb應(yīng)用程序開發(fā)技術(shù) 要學(xué)好ASP NET的編程 必須掌握一種編程語(yǔ)言 本章將首先介紹C 語(yǔ)言 為讀者編程提供參考 詳細(xì)的C 編程方法請(qǐng)看專門書籍 然后介紹了主要Web服務(wù)器標(biāo)準(zhǔn)控件 服務(wù)器端驗(yàn)證控件和ASP NET內(nèi)置服務(wù)器對(duì)象等的使用 介紹了Web config文件的作用和常用配置參數(shù) 重點(diǎn)介紹了ADO NET數(shù)據(jù)庫(kù)訪問技術(shù)以及執(zhí)行存儲(chǔ)過程 數(shù)據(jù)庫(kù)的事務(wù)處理 跨數(shù)據(jù)庫(kù)訪問 數(shù)據(jù)綁定技術(shù)等內(nèi)容 給出了創(chuàng)建和訪問Web服務(wù)的實(shí)例 以案例方式對(duì) NET中的代碼重用實(shí)現(xiàn)技術(shù) 包括Web開發(fā)中的類庫(kù)構(gòu)建與訪問 Web自定義控件和工具箱控件開發(fā)等進(jìn)行了初步介紹 最后實(shí)例演示了如何在ASP NET中進(jìn)行XML編程 第6章 NETWeb應(yīng)用程序開發(fā)技術(shù) 6 1C 語(yǔ)言初步6 2常用ASP NET控件的使用6 3Web config文件的配置6 4ASP NET內(nèi)置服務(wù)器對(duì)象與Global asax文件6 5ADO NET數(shù)據(jù)庫(kù)訪問技術(shù)6 6用VS2005創(chuàng)建和訪問Web服務(wù)實(shí)例6 7Web開發(fā)中的類庫(kù)構(gòu)建與訪問6 8Web控件開發(fā)實(shí)例6 9ASP NET中XML編程基礎(chǔ) 6 1C 語(yǔ)言初步 6 1 1C 程序的基本結(jié)構(gòu)6 1 2C 中的數(shù)據(jù)類型6 1 3C 變量聲明及其初始化6 1 4C 表達(dá)式6 1 5C 控制語(yǔ)句6 1 6C 類聲明 6 2常用ASP NET控件的使用 6 2 1服務(wù)器端標(biāo)準(zhǔn)控件6 2 2服務(wù)器端驗(yàn)證控件6 2 3服務(wù)器控件使用注意事項(xiàng)6 2 4服務(wù)器端數(shù)據(jù)訪問控件 6 4ASP NET內(nèi)置服務(wù)器對(duì)象與Global asax文件 6 4 1ASP NET內(nèi)置服務(wù)器對(duì)象6 4 2Global asax文件 6 5ADO NET數(shù)據(jù)庫(kù)訪問技術(shù) 6 5 1Connection對(duì)象6 5 2Command對(duì)象6 5 3DataReader對(duì)象6 5 4Dataset對(duì)象與DataAdapter對(duì)象6 5 5執(zhí)行存儲(chǔ)過程6 5 6數(shù)據(jù)庫(kù)事務(wù)處理6 5 7跨數(shù)據(jù)庫(kù)訪問6 5 8數(shù)據(jù)綁定技術(shù) 6 7Web開發(fā)中的類庫(kù)構(gòu)建與訪問 6 7 1在Web開發(fā)中構(gòu)建一個(gè)類庫(kù)6 7 2在Web開發(fā)中訪問類庫(kù) 6 8Web控件開發(fā)實(shí)例 6 8 1建立用戶自定義控件6 8 2工具箱控件的創(chuàng)建與使用 6 1 1C 程序的基本結(jié)構(gòu) C 是由C和C 發(fā)展而來的面向?qū)ο蠛皖愋桶踩木幊陶Z(yǔ)言 C 讀作CSharp 它和JAVA非常相近 其目標(biāo)在于把VisualBasic的高生產(chǎn)力和C 本身的能力結(jié)合起來 下面我們通過一個(gè)C 語(yǔ)言的簡(jiǎn)單例子來了解一些概念和用C 語(yǔ)言編寫程序的方法 例6 1 usingSystem classHello staticvoidMain Console WriteLine Hello world 下面對(duì)這個(gè)程序進(jìn)行一些說明 1 C 程序的源代存儲(chǔ)在擴(kuò)展名為 cs的文件中 2 usingSystem引用名稱空間 名稱空間是在Microsoft NET類庫(kù)中提供的 使用 using 命令后 就可以無障礙地使用名稱空間中的各種類型員 例如System名稱空間下有一個(gè)IO名稱空間 IO名稱空間下又有一個(gè)File名稱空間 現(xiàn)在我們要使用該空間則在引用的時(shí)候可以寫成usingSystem IO File 3 Main方法是類Hello中的一個(gè)成員 它有static的說明符 所以它是類Hello中的一個(gè)方法而不是此類中的實(shí)例 Main方法是應(yīng)用程序的主入口點(diǎn) 也稱作開始執(zhí)行應(yīng)用程序的方法 4 C 語(yǔ)言編譯器CSC EXE只是將程序員編寫的代碼編譯成MSIL MicrosoftIntemediateLanguage 中間語(yǔ)言 中間語(yǔ)言在安裝時(shí)被運(yùn)行庫(kù)編譯成本機(jī)代碼或者首次運(yùn)行時(shí)被實(shí)時(shí)編譯 因此例6 1中的hello exe只是一個(gè)由中間語(yǔ)言可執(zhí)行文件頭組成的可移植執(zhí)行文件 下面我們從以下幾個(gè)方面對(duì)C 語(yǔ)言進(jìn)行詳細(xì)介紹 6 1 2C 中的數(shù)據(jù)類型 C 支持兩種類型 數(shù)據(jù)類型和引用類型 數(shù)據(jù)類型和引用類型的區(qū)別在于 數(shù)據(jù)類型變量直接包含它們的數(shù)據(jù) 而引用類型變量是存儲(chǔ)對(duì)于對(duì)象的引用 對(duì)于引用類型 有可能兩個(gè)變量引用相同的對(duì)象 因而可能出現(xiàn)對(duì)一個(gè)變量的操作影響到其他變量所引用對(duì)象的情況 對(duì)于數(shù)據(jù)類型 每個(gè)變量都有它們自己對(duì)數(shù)據(jù)的拷貝 所以不太可能因?yàn)閷?duì)一個(gè)進(jìn)行操作而影響到其他變量 6 1 3C 變量聲明及其初始化 我們結(jié)合表6 1來介紹數(shù)據(jù)類型變量聲明及其初始化表6 1 C 中有靜態(tài)變量 引用參數(shù) 數(shù)組變量 實(shí)例變量 值參數(shù) 輸出參數(shù)和局部變量7種變量類型 具體參照下表 在C 中 既可以通過值也可以通過引用傳遞參數(shù) 通過引用傳遞參數(shù)允許函數(shù)成員更改參數(shù)的值 并保持該更改 若要通過引用傳遞參數(shù) 可使用ref或out關(guān)鍵字 ref和out這兩個(gè)關(guān)鍵字都能夠提供相似的功效 其作用也很像C中的指針變量 它們的區(qū)別是 1 使用ref型參數(shù)時(shí) 傳入的參數(shù)必須先被初始化 對(duì)out而言 必須在方法中對(duì)其完成初始化 2 使用ref和out時(shí) 在方法的參數(shù)和執(zhí)行方法時(shí) 都要加Ref或Out關(guān)鍵字 以滿足匹配 3 out適合用在需要retrun多個(gè)返回值的地方 而ref則用在需要被調(diào)用的方法修改調(diào)用者的引用的時(shí)候 注 在C 中 方法的參數(shù)傳遞有四種類型 傳值 byvalue 傳址 byreference 輸出參數(shù) byoutput 數(shù)組參數(shù) byarray 傳值參數(shù)無需額外的修飾符 傳址參數(shù)需要修飾符ref 輸出參數(shù)需要修飾符out 數(shù)組參數(shù)需要修飾符params 傳值參數(shù)在方法調(diào)用過程中如果改變了參數(shù)的值 那么傳入方法的參數(shù)在方法調(diào)用完成以后并不因此而改變 而是保留原來傳入時(shí)的值 傳址參數(shù)恰恰相反 如果方法調(diào)用過程改變了參數(shù)的值 那么傳入方法的參數(shù)在調(diào)用完成以后也隨之改變 實(shí)際上從名稱上我們可以清楚地看出兩者的含義 傳值參數(shù)傳遞的是調(diào)用參數(shù)的一份拷貝 而傳址參數(shù)傳遞的是調(diào)用參數(shù)的內(nèi)存地址 該參數(shù)在方法內(nèi)外指向的是同一個(gè)存儲(chǔ)位置 6 1 4C 表達(dá)式 C 的表達(dá)式大致包含了算術(shù)表達(dá)式 賦值表達(dá)式 關(guān)系表達(dá)式和邏輯表達(dá)式 1 算術(shù)表達(dá)式用算術(shù)操作符把數(shù)值連接在一起的 符合C 語(yǔ)法的表達(dá)式稱為算術(shù)表達(dá)式 算術(shù)操作符包括 2 賦值表達(dá)式C 賦值操作符的運(yùn)算規(guī)則下表所示 3 關(guān)系表達(dá)式 等操作符稱為關(guān)系操作符 用關(guān)系操作符把運(yùn)算對(duì)象連接起來并符合C 語(yǔ)法的式子稱為關(guān)系表達(dá)式 關(guān)系表達(dá)式要么返回true要么返回false 4 邏輯表達(dá)式 and or 和 not 操作符稱為邏輯操作符 用邏輯操作符把運(yùn)算對(duì)象連接起來并符合C 語(yǔ)法的式子稱為邏輯表達(dá)式 6 1 5C 控制語(yǔ)句 C 中控制語(yǔ)句主要包括分支和循環(huán)語(yǔ)句 分支語(yǔ)句有3種 1 三元運(yùn)算符 例如 a b 5 100 10表示b 5時(shí)a 100 否則a 10 2 if語(yǔ)句 3 switch語(yǔ)句 循環(huán)語(yǔ)句有4種 1 已知步長(zhǎng)的for語(yǔ)句 2 foreach語(yǔ)句 3 while語(yǔ)句 4 dowhile語(yǔ)句 它們的語(yǔ)法結(jié)構(gòu)如表6 4所示 其中switch語(yǔ)句可一次將測(cè)試變量與多個(gè)值比較 而if僅僅測(cè)試一個(gè)條件 對(duì)于循環(huán)語(yǔ)句可用break和continue語(yǔ)句決定是否跳出循環(huán)或繼續(xù)執(zhí)行循環(huán) foreach語(yǔ)句可以遍歷一個(gè)集合中的所有元素 6 1 6C 類聲明類是一種將數(shù)據(jù)成員 函數(shù)成員和嵌套類型等進(jìn)行封裝的數(shù)據(jù)結(jié)構(gòu) 它在面向?qū)ο蠡A(chǔ)上引入了接口 屬性 方法 事件等組件特性 其數(shù)據(jù)成員可以是常量或域 函數(shù)成員可以是方法 屬性 索引 事件 操作符或靜態(tài)構(gòu)造函數(shù)和析構(gòu)函數(shù) 構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)被自動(dòng)調(diào)用 用來執(zhí)行對(duì)象的初始化操作 其函數(shù)名總是與類名相同 析構(gòu)函數(shù)在釋放對(duì)象時(shí)被調(diào)用 用來刪除對(duì)象前做一些清理工作 類的訪問修飾符有五種可能形式 如下表所示 public 對(duì)任何類和成員都公開 無限制訪問 protected 僅僅對(duì)該類以及該類的派生類公開 private 僅僅對(duì)該類公開 internal 只能值包含該類的程序集中訪問該類 只是單獨(dú)的項(xiàng)目 而不是整個(gè)解決方案 protectedinternal 只能在本類 派生類或者包含該類的程序集中訪問 下面簡(jiǎn)要介紹類成員的有關(guān)概念 1 常數(shù)一個(gè)常數(shù)是一個(gè)代表常數(shù)值的類成員即某個(gè)可以在編譯時(shí)計(jì)算的數(shù)值 只要沒有循環(huán)從屬關(guān)系 允許常數(shù)依賴同一程序中的其他常數(shù) 2 域 字段 域是一個(gè)代表和某對(duì)象或類相關(guān)的變量的成員 域也叫成員變量 它表示存儲(chǔ)位置 用來保存類的各種數(shù)據(jù)信息 域可以是靜態(tài)的 只讀域可以用來避免錯(cuò)誤的發(fā)生 對(duì)于一個(gè)只讀域的賦值 只會(huì)在相同類中的部分聲明和構(gòu)造函數(shù)中發(fā)生 3 方法方法是一個(gè)執(zhí)行可以由對(duì)象或類完成的計(jì)算或行為的成員 方法有一個(gè)形式參數(shù)列表 可能為空 一個(gè)返回?cái)?shù)值 或void 并且可以是靜態(tài)也可以是非靜態(tài) 靜態(tài)方法要通過類來訪問 非靜態(tài)方法 也稱為實(shí)例方法 通過類的實(shí)例來訪問 方法可以被重復(fù)調(diào)用 這意味著只要有一個(gè)唯一的簽名 多個(gè)方法可能有相同的名稱 方法的簽名包括方法 數(shù)據(jù) 修飾符和它的形式參數(shù)的各種類型的名稱 方法的簽名不包括return類型 4 屬性屬性是提供對(duì)對(duì)象或類的特性進(jìn)行訪問的成員 屬性的例子包括字符串的長(zhǎng)度 字體的大小 窗口的焦點(diǎn) 用戶的名字等等 屬性是域的自然擴(kuò)展 兩者都是用相關(guān)類型成員命名 并且訪問域和屬性的語(yǔ)法是相同的 然而 與域不同 屬性不指示存儲(chǔ)位置 作為替代 屬性有存取程序 它指定聲明的執(zhí)行來對(duì)它們進(jìn)行讀或?qū)?屬性是由屬性聲明定義的 屬性聲明的第一部分看起來和域聲明相當(dāng)相似 第二部分包括一個(gè)get存取程序和一個(gè)set存取程序 5 事件事件是使得對(duì)象和類提供通知的成員 一個(gè)類通過提供事件聲明來定義一個(gè)事件 這看起來與域和事件聲明相當(dāng)類似 但是有一個(gè)event關(guān)鍵字 這個(gè)聲明的類型必須是delegate類型 6 操作符操作符是一個(gè)定義了可以用來使用在類的實(shí)例上的表達(dá)式 7 索引器索引器 indexer 是使得對(duì)象可以像數(shù)組一樣被索引的成員 屬性使類似域的訪問變得可能 索引器使得類似數(shù)組的訪問變得可能 索引器的聲明類似于屬性的聲明 最大的不同在于索引器是無名的 由于this是被索引 所以用于聲明中的名稱是this class或struct只允許定義一個(gè)索引器 而且索引器總是包含單個(gè)索引參數(shù) 索引參數(shù)在一對(duì)方括號(hào)中提供 用于指定要訪問的元素 8 實(shí)例構(gòu)造函數(shù)實(shí)例構(gòu)造函數(shù)是實(shí)現(xiàn)對(duì)類中實(shí)例進(jìn)行初始化的行為的成員 是一種特殊的方法 它與類同名 能獲取參數(shù) 但不能返回任何值 每個(gè)類都必須至少有一個(gè)構(gòu)造函數(shù) 如果類中沒有提供構(gòu)造函數(shù) 那么編譯器會(huì)自動(dòng)提供一個(gè)沒有參數(shù)的默認(rèn)構(gòu)造函數(shù) 9 析構(gòu)函數(shù)析構(gòu)函數(shù) destructor 是實(shí)現(xiàn)破壞一個(gè)類的實(shí)例的行為的成員 析構(gòu)函數(shù)完成對(duì)象被垃圾回收時(shí)需要執(zhí)行的整理工作 在碎片收集時(shí)會(huì)被自動(dòng)調(diào)用 在C 中 沒有提供一個(gè)delete操作符 由運(yùn)行庫(kù)控制何時(shí)摧毀一個(gè)對(duì)象 析構(gòu)函數(shù)的語(yǔ)法是首先寫一個(gè) 符號(hào) 然后跟上類名 析構(gòu)函數(shù)不能有參數(shù) 不能帶任何訪問修飾符 比如public 而且不能被調(diào)用 不能在一個(gè)struct中聲明一個(gè)析構(gòu)函數(shù) 10 靜態(tài)構(gòu)造函數(shù)靜態(tài)構(gòu)造函數(shù)是實(shí)現(xiàn)對(duì)一個(gè)類進(jìn)行初始化的行為的成員 靜態(tài)構(gòu)造函數(shù)不能有參數(shù) 不能有修飾符而且不能被調(diào)用 當(dāng)類被加載時(shí) 類的靜態(tài)構(gòu)造函數(shù)自動(dòng)被調(diào)用 11 繼承繼承 Inheritance 是面向?qū)ο蟮囊粋€(gè)關(guān)鍵概念 它描述了類之間的一種關(guān)系 假如多個(gè)不同的類具有大量通用的特性 而且這些類相互之間的關(guān)系非常清晰 那么使用繼承就能避免大量重復(fù)的工作 類支持單繼承 System Object類是所有類的基類 所有類都是隱式地從System Object類派生而來的 方法 屬性和索引器都可以是虛擬 virtual 的 這意味著他們可以在派生的類中被覆蓋 override 可以通過使用abstract關(guān)鍵字來說明一個(gè)類是不完整的 只是用作其他類的基類 這樣的類被稱為抽象類 抽象類可以指定抽象函數(shù) 非抽象派生類必須實(shí)現(xiàn)的成員 12 接口接口定義了一個(gè)連接 一個(gè)類或結(jié)構(gòu)必須根據(jù)它的連接來實(shí)現(xiàn)接口 接口可以把方法 屬性 索引器和事件作為成員 類和結(jié)構(gòu)可以實(shí)現(xiàn)多個(gè)接口 因?yàn)橥ㄟ^外部指派接口成員實(shí)現(xiàn)了每個(gè)成員 所以用這種方法實(shí)現(xiàn)的成員稱為外部接口成員 外部接口成員可以只是通過接口來調(diào)用 13 委派委派 delegates 是指向一個(gè)方法的指針 委派與C 中的函數(shù)指針相似 與函數(shù)指針不同委派是類型安全并且可靠的 委派是引用類型 它從公共基類 System Delegate派生出來 一個(gè)委派實(shí)例壓縮了一個(gè)方法 可調(diào)用的實(shí)體 對(duì)于靜態(tài)方法 一個(gè)可調(diào)用實(shí)體由類和類中的靜態(tài)方法組成 委派的一個(gè)有趣而且有用的特性是它不知道或不關(guān)心與它相關(guān)的對(duì)象的類型 對(duì)象所要做的所有事情是方法的簽名和委派的簽名相匹配 這使得委派很適合 匿名 調(diào)用 而這是個(gè)很有用的功能 定義和使用委派分為三步 聲明 實(shí)例化和調(diào)用 用delegate聲明語(yǔ)法來聲明委派 delegatevoidSimpleDelegate 聲明了一個(gè)名為SimpleDelegate的委派 它沒有任何參數(shù)并且返回類型為void 14 枚舉枚舉類型的聲明為一個(gè)符號(hào)常數(shù)相關(guān)的組定義了一個(gè)類型名稱 枚舉應(yīng)用于 多選擇 的場(chǎng)合 運(yùn)行時(shí)間是由在編譯時(shí)所知道的固定的選擇數(shù)目所決定 因?yàn)槭褂妹杜e可以使代碼更可讀還可以自歸檔 所以使用枚舉比使用整數(shù)常數(shù)要好 代碼的自歸檔特點(diǎn)也使得開發(fā)工具可以幫助編寫代碼和進(jìn)行一些其他的 設(shè)計(jì)者 行為 在本小節(jié)最后 我們給出一個(gè)范例 本店經(jīng)營(yíng)各類毛絨玩具禮品 公仔 靠墊 掛件等等 支持批發(fā)零售 歡迎來樣看樣定做生產(chǎn) 為了賺人氣 本店所有商品批發(fā)價(jià)銷售 超低秒殺 雖然我們的信譽(yù)不高 但我們會(huì)以誠(chéng)信為本 為您提供質(zhì)高價(jià)廉的商品和優(yōu)質(zhì)的服務(wù) 祝您購(gòu)物愉快 歡迎大家來逛逛 揚(yáng)州五亭龍玩具總動(dòng)員 個(gè)人小廣告 6 2常用ASP NET控件的使用 ASP NET控件主要分為以下八類 如表所示 6 2 1服務(wù)器端標(biāo)準(zhǔn)控件 1 Label和Literal控件使用Label控件在網(wǎng)頁(yè)的設(shè)置位置上顯示文本 可以通過Text屬性自定義顯示文本 Text屬性中可以包含其他HTML元素 Literal控件和Label控件類似 但它不可向文本中添加任何HTML元素 因此 Literal控件不支持包括位置屬性在內(nèi)的任何樣式屬性 轉(zhuǎn)換成客戶端HTML代碼后 Literal則是什么標(biāo)記都不帶 但Literal控件允許指定是否對(duì)內(nèi)容進(jìn)行編碼 通常情況下 當(dāng)希望文本和控件直接呈現(xiàn)在頁(yè)面中而不使用任何附加標(biāo)記時(shí) 可使用Literal控件 2 TextBox文本框控件該控件用于獲取用戶輸入的文本或顯示文本 Text控件常用的屬性如下表所示 3 Image控件該控件是用來插入圖片的 常用的屬性如下表所示 4 BUTTON LINKBUTTON IMAGEBUTTON控件這三個(gè)控件分別表示普通按鈕 超鏈接形式的按鈕和圖像按鈕 每當(dāng)用戶單擊按鈕時(shí) 即調(diào)用CLICK事件處理程序 這三個(gè)控件常用的屬性如下表所示 CommandName CommandArgument使用范例 5 HyperLink控件該控件用于制作文本或圖片超級(jí)鏈接 常用的屬性下表所示 6 RadioButton單選按鈕該控件為用戶提供由兩個(gè)或多個(gè)互斥選項(xiàng)組成的選項(xiàng)集 當(dāng)用戶選擇某單選按鈕時(shí) 同一組中的其他單選按鈕不能同時(shí)被選定 當(dāng)單擊RadionButton按鈕時(shí) 其Checked屬性設(shè)置為true 并且調(diào)用Click事件處理程序 當(dāng)Checked屬性的值更改時(shí) 將引發(fā)CheckedChanged事件 用戶可以通過用Text屬性設(shè)置控件內(nèi)顯示的文本 RadioButton控件常用的屬性如下表所示 7 CheckBox復(fù)選框該控件通常是成組使用來完成多重選項(xiàng)的目的 Checkbox控件常用的屬性如表所示 CheckBox控件使用范例 8 DropDownList控件DropDownList控件使用戶可以從下拉列表框中進(jìn)行選擇 DropDownList控件常用屬性及說明如下表所示 DropDownList控件使用范例 9 ListBox列表框列表框通過顯示多個(gè)選項(xiàng)供用戶選擇達(dá)到與用戶對(duì)話的目的 ListBox控件常用的屬性如下表所示 10 FileUpload文件上載控件該控件可實(shí)現(xiàn)讓用戶在客戶端選擇一個(gè)文件 然后放到Web服務(wù)器的某個(gè)指定的文件夾下 FileUpload文件上載控件使用范例 11 Panel和Placeholder控件Panel和Placeholder控件都屬于容器控件 容器控件是指該控件可以動(dòng)態(tài)容納其他控件或HTML元素 要在運(yùn)行時(shí)刻向Web頁(yè)面中動(dòng)態(tài)添加內(nèi)容 利用容器控件即可實(shí)現(xiàn)動(dòng)態(tài)添加內(nèi)容到Web頁(yè)中 Panel和Placeholder控件 占位控件 轉(zhuǎn)換成客戶端HTML代碼后 呈現(xiàn)為div元素 PlaceholderWeb服務(wù)器控件可以將空的容器控件放置到頁(yè)內(nèi) 然后在運(yùn)行時(shí)動(dòng)態(tài)添加 刪除子元素等 該控件只呈現(xiàn)其子元素 不具有自己的基于HTML的輸出 Panel服務(wù)器控件最終在客戶端呈現(xiàn)為div元素 但在Web開發(fā)時(shí)允許用戶在該控件中添加其他控件 而且在運(yùn)行過程中也允許動(dòng)態(tài)添加控件 6 2 2服務(wù)器端驗(yàn)證控件服務(wù)器端驗(yàn)證控件是ASP NET控件中新產(chǎn)生的一類驗(yàn)證控件 當(dāng)用戶輸入錯(cuò)誤時(shí) 驗(yàn)證控件可以顯示錯(cuò)誤信息 驗(yàn)證控件在正常工作情況下是不可見的 只有當(dāng)用戶輸入數(shù)據(jù)有誤時(shí) 它們才是可見的 在具體介紹每個(gè)控件之前先了解一下它們的公共屬性 驗(yàn)證控件的公共屬性如下表所示 服務(wù)器端驗(yàn)證控件包含RequiredFieldValidator RangeValidator RegularExpressionValidator CompareValidator CustomValidator ValidationSummary六種驗(yàn)證控件 1 RequiredFieldValidator控件該控件又稱非空驗(yàn)證控件 常用于文本輸入框的非空驗(yàn)證 若在網(wǎng)頁(yè)上使用此控件 則當(dāng)用戶提交網(wǎng)頁(yè)到服務(wù)器端時(shí) 系統(tǒng)自動(dòng)檢查被驗(yàn)證控件的輸入是否為空 如果為空 則網(wǎng)頁(yè)顯示錯(cuò)誤信息 2 RangeValidator控件該控件又稱范圍驗(yàn)證控件 當(dāng)用戶輸入不在驗(yàn)證范圍內(nèi)的值時(shí)將印發(fā)頁(yè)面錯(cuò)誤 該控件提供Integer String Date Double和Currency五種驗(yàn)證 3 RegularExpressionValidator控件該控件又稱正則表達(dá)式驗(yàn)證控件 它的驗(yàn)證功能比非空驗(yàn)證控件和范圍驗(yàn)證控件更強(qiáng)大 用戶可以自定義或書寫自己的驗(yàn)證表達(dá)式 4 CompareValidator控件該控件又稱比較驗(yàn)證控件 主要用來驗(yàn)證TextBox控件內(nèi)容或者某個(gè)控件的內(nèi)容與某個(gè)固定表達(dá)式的值是否相同 5 CustomValidator控件該控件又稱自定義控件 它使用自定義的嚴(yán)整函數(shù)來使用驗(yàn)證方式 CustomValidator控件與其他驗(yàn)證控件的最大區(qū)別是該控件可以添加客戶端驗(yàn)證函數(shù)和服務(wù)器端驗(yàn)證函數(shù) 客戶端驗(yàn)證函數(shù)總是在ClientValidatorFunction屬性中指定的 而服務(wù)器端驗(yàn)證函數(shù)總是通過OnServerValidate屬性來設(shè)定 并指定為ServerValidate事件處理程序 6 ValidationSummary控件該控件又稱錯(cuò)誤總結(jié)控件 主要是收集本頁(yè)中所有驗(yàn)證錯(cuò)誤信息 并將它們組織好后顯示出來 6 2 3服務(wù)器控件使用注意事項(xiàng) 使用VS2005進(jìn)行Web開發(fā)的初學(xué)者很容易產(chǎn)生對(duì)服務(wù)器控件的依賴性 幾乎所有Web頁(yè)面都采用服務(wù)器控件 HTML控件 客戶端控件 被束之高閣 當(dāng)然這是一種簡(jiǎn)便的編程方法 但卻是一種不考慮運(yùn)行效率的做法 我們?cè)诒竟?jié)開頭已介紹了客戶端控件和服務(wù)器控件的區(qū)別 服務(wù)器控件意味著要消耗更多的網(wǎng)絡(luò)帶寬和服務(wù)器資源 而客戶端控件的處理邏輯全部在瀏覽器中進(jìn)行 因此不能養(yǎng)成使用服務(wù)器控件的習(xí)慣性思維 在使用控件的時(shí)候有必要思考一下采用客戶端控件的可能性 6 2 4服務(wù)器端數(shù)據(jù)訪問控件 數(shù)據(jù)訪問控件根據(jù)所實(shí)現(xiàn)的功能分為兩大類 數(shù)據(jù)源控件和數(shù)據(jù)綁定控件 數(shù)據(jù)源控件可實(shí)現(xiàn)對(duì)不同數(shù)據(jù)源的數(shù)據(jù)訪問 數(shù)據(jù)綁定控件主要用于以多種方式顯示數(shù)據(jù) 數(shù)據(jù)源控件和數(shù)據(jù)綁定控件如下表所示 接上表 數(shù)據(jù)源控件分為兩種 普通數(shù)據(jù)源控件和層次化數(shù)據(jù)源控件 樹型結(jié)構(gòu) 普通數(shù)據(jù)源控件包括SqlDataSource ObjectDataSource AccessDataSource主要檢索帶有行和列的基于數(shù)據(jù)表的數(shù)據(jù)源 層次化數(shù)據(jù)源控件包括XmlDataSource和SiteMapDataSource 主要檢索包含層次化數(shù)據(jù)的數(shù)據(jù)源 1 SqlDataSource控件SqlDataSource控件可以用來從任何OLEDB或者符合ODBC的數(shù)據(jù)源中檢索數(shù)據(jù) 能夠訪問目前主流的數(shù)據(jù)庫(kù)系統(tǒng) 該控件常用的屬性及說明如下表所示 6 2 4 1數(shù)據(jù)源控件 2 AccessDataSource控件AccessDataSource是 NET提供了一種訪問Access數(shù)據(jù)庫(kù)的專用數(shù)據(jù)源控件 該控件能夠快速連接Access數(shù)據(jù)庫(kù) 并且通過SQL語(yǔ)句等對(duì)數(shù)據(jù)庫(kù)記錄實(shí)現(xiàn)操作 該控件常用的屬性及說明如下表所示 3 ObjectDataSource控件 多數(shù)ASP NET數(shù)據(jù)源控件 如SqlDataSource等 都在兩層應(yīng)用程序?qū)哟谓Y(jié)構(gòu)中使用 在該層次結(jié)構(gòu)中 表示層 ASP NET網(wǎng)頁(yè) 可以與數(shù)據(jù)層 數(shù)據(jù)庫(kù)和XML文件等 直接進(jìn)行通信 但是 常用的應(yīng)用程序設(shè)計(jì)原則是 將表示層與業(yè)務(wù)邏輯相分離 而將業(yè)務(wù)邏輯封裝在業(yè)務(wù)對(duì)象中 這些業(yè)務(wù)對(duì)象在表示層和數(shù)據(jù)層之間形成一層 從而生成一種三層應(yīng)用程序結(jié)構(gòu) ObjectDataSource控件通過提供一種將相關(guān)頁(yè)上的數(shù)據(jù)控件綁定到中間層業(yè)務(wù)對(duì)象的方法 為三層結(jié)構(gòu)提供支持 在不使用擴(kuò)展代碼的情況下 ObjectDataSource使用中間層業(yè)務(wù)對(duì)象以聲明方式對(duì)數(shù)據(jù)執(zhí)行選擇 插入 更新 刪除 分頁(yè) 排序 緩存和篩選操作 ObjectDataSource控件使用反射調(diào)用業(yè)務(wù)對(duì)象的方法 以對(duì)數(shù)據(jù)執(zhí)行選擇 更新 插入和刪除操作 設(shè)置ObjectDataSource控件的TypeName屬性來指定要用作源對(duì)象的類名稱 3 XmlDataSource控件 XmlDataSource控件是專門針對(duì)XML數(shù)據(jù)而發(fā)布的數(shù)據(jù)源控件 該控件常用的屬性及說明如下表所示 4 SiteMapDataSource控件 SiteMapDataSource控件用來連接包含來自站點(diǎn)地圖的導(dǎo)航數(shù)據(jù) 此數(shù)據(jù)包括有關(guān)網(wǎng)站中的頁(yè)的信息 如URL 標(biāo)題 說明和導(dǎo)航層次結(jié)構(gòu)中的位置 該控件的使用較為復(fù)雜 有興趣的讀者可參閱其他專門書籍 6 2 4 2數(shù)據(jù)綁定控件 1 GridView控件GridView控件采用表格形式顯示從數(shù)據(jù)庫(kù)中獲取的數(shù)據(jù)集合 通過使用GridView控件 用戶可以顯示 編輯 刪除 排序和翻閱多種不同的數(shù)據(jù)源中的表格數(shù)據(jù) 該控件常用的屬性及說明如下表所示 GridView控件使用范例 2 Repeater控件數(shù)據(jù)綁定控件Repeater的主要功能是以更自由的方式來控制數(shù)據(jù)的顯示 它會(huì)按照所要求的樣式嚴(yán)格地輸出數(shù)據(jù)記錄 Repeater控件使用范例 3 DataList控件DataList服務(wù)器控件使用模板和樣式來顯示數(shù)據(jù) 它需要連接到某個(gè)數(shù)據(jù)源控件 實(shí)現(xiàn)不同布局的數(shù)據(jù)顯示 DataList控件所支持的模板類型類似于Reapter控件 但增加了編輯和選擇模板 編輯模板可用來刪除和修改記錄 選擇模板可用來處理選中某個(gè)記錄后的顯示方式 模板類型如下表所示 DataList控件的常用事件及說明如下表所示 DataList控件使用范例 3 DetailsView控件DetailsView控件的主要功能是以表格形式顯示和處理來自數(shù)據(jù)源的單條數(shù)據(jù)記錄 DetailsView控件支持以下功能 綁定至數(shù)據(jù)源控件 內(nèi)置插入功能 內(nèi)置更新和刪除功能 內(nèi)置分頁(yè)功能 以編程方式訪DetailsView對(duì)象模型從而動(dòng)態(tài)設(shè)置屬性 處理事件等 可通過主題和樣式進(jìn)行自定義外觀 下表列出了可以在DetailsView控件中使用的7種不同行字段類型 DetailsView同樣支持模板功能 下表列出了它所支持的模板 DetailsView控件常用屬性與GridView控件相似 可以參照學(xué)習(xí)DetailsView控件的常用事件及說明如下表所示 DetailsView控件使用范例 4 FormView控件FormView控件用于顯示數(shù)據(jù)源中的單個(gè)記錄 FormView控件則默認(rèn)創(chuàng)建一個(gè)空白的區(qū)域 實(shí)際上所創(chuàng)建的是一個(gè)只有一行一列的表格 FormView控件不具備自動(dòng)創(chuàng)建表格顯示數(shù)據(jù)的功能 FormView控件需要開發(fā)人員自定義ItemTemplate PagerTemplate等模板屬性 以自定義方式顯示各個(gè)字段 FormView控件支持以下功能 支持綁定到數(shù)據(jù)源控件 內(nèi)置數(shù)據(jù)插入 更新和刪除功能 內(nèi)置分頁(yè)功能 允許以編程方式訪問FormView控件對(duì)象模型 以動(dòng)態(tài)設(shè)置屬性 處理事件等 通過用戶定義的模板 主題和樣式自定義外觀 FormView控件作為一個(gè)數(shù)據(jù)綁定控件 可與數(shù)據(jù)源控件結(jié)合實(shí)現(xiàn)各種數(shù)據(jù)操作 當(dāng)FormView控件通過DataSouceID屬性連接數(shù)據(jù)源控件后 該控件可利用數(shù)據(jù)源控件的內(nèi)置功能 在自身內(nèi)置功能的支持下 實(shí)現(xiàn)數(shù)據(jù)更新 刪除 添加和分頁(yè)等操作 由于FormView控件使用模板屬性 因此 沒有提供自動(dòng)生成命令按鈕的功能 開發(fā)人員必須在模板屬性中 自行定義各種命令按鈕 這樣才能實(shí)現(xiàn)數(shù)據(jù)操作功能 DetailsView控件支持的模板見下表 FormView控件使用范例 5 ReportViewer控件ReportViewer服務(wù)器控件用來呈現(xiàn)表格格式數(shù)據(jù) 聚合數(shù)據(jù)和多維數(shù)據(jù) 它可以圖表的形式顯示數(shù)據(jù) ReportViewer服務(wù)器控件可以配置成以本地處理模式或遠(yuǎn)程處理模式運(yùn)行 本地處理模式 是指ReportViewer控件在客戶端應(yīng)用程序中處理報(bào)表 所有報(bào)表都是使用應(yīng)用程序提供的數(shù)據(jù)作為本地過程處理的 遠(yuǎn)程處理模式 是指由SQLServer2005ReportingServices報(bào)表服務(wù)器處理報(bào)表 在遠(yuǎn)程處理模式下 ReportViewer控件用作查看器 顯示已經(jīng)在ReportingServices報(bào)表服務(wù)器上發(fā)布的預(yù)定義報(bào)表 ReportViewer控件中常用的屬性如下表所示 6 6 2 3正確使用GridView Repeater和DataList控件數(shù)據(jù)綁定控件GridView Repeater和DataList是顯示數(shù)據(jù)的有力控件 其中GridView是迄今為止功能最為豐富的數(shù)據(jù)顯示控件 大部分功能可通過屬性設(shè)置來完成 甚至不需要編寫一行代碼就能實(shí)現(xiàn)強(qiáng)大的數(shù)據(jù)處理功能 許多初學(xué)者在進(jìn)行Web開發(fā)時(shí) 只要遇到數(shù)據(jù)處理或顯示就習(xí)慣性地使用GridView控件 雖然使用GridView大大減少了開發(fā)者的編程工作量 但最大的問題就是該控件在處理數(shù)據(jù)時(shí)需要占用很多Web服務(wù)器資源 生成在客戶端呈現(xiàn)的HTML文件也非常大 而且只能以表格形式輸出數(shù)據(jù) 最終導(dǎo)致系統(tǒng)響應(yīng)性能降低 我們建議在用戶數(shù)據(jù)量不大且不需要出色的界面效果 特別是當(dāng)需要編輯 分頁(yè) 排序功能的時(shí)候 快的處理性能 具有更好的顯示效果的時(shí)候推薦使用Reapter控件 Reapter控件允許對(duì)用戶通過模板自定義數(shù)據(jù)項(xiàng)的輸出 處理速度非常快 但Reapter控件的缺點(diǎn)是 必須在各個(gè)模板中進(jìn)行手工編寫代碼 對(duì)于分頁(yè) 排序 編輯等都必須編寫代碼 DataList控件的使用性能介于GridView和Repeater之間 可在DataList中通過屬性設(shè)置定義各個(gè)模板 然后部分地通過編程實(shí)現(xiàn)分頁(yè) 排序 數(shù)據(jù)編輯 6 3Web config文件的配置 ASP NET的應(yīng)用程序配置文件web config是基于XML格式的純文本文件 存在于應(yīng)用的各個(gè)目錄下 它決定了站點(diǎn)所在目錄及其子目錄的配置信息 并且子目錄下的配置信息覆蓋其父目錄的配置 1 配置文件的語(yǔ)法規(guī)則 標(biāo)記配置內(nèi)容被置于web config文件中的標(biāo)記和之間 格式如下 配置內(nèi)容 配置段句柄說明ASP NET的配置文件架構(gòu)并未指定任何文件格式或者是支持的配置屬性 相反 它提出了 配置段句柄申明 的概念來支持任意的用戶定義配置段 格式如下 配置段具體定義配置的內(nèi)容 供應(yīng)用使用 配置段使用范例 2 ASP NET定義的標(biāo)準(zhǔn)配置段ASP NET定義的標(biāo)準(zhǔn)配置段及其說明如下表所示 所有配置信息都駐留在和根XML標(biāo)記之間 標(biāo)記間的配置信息分為兩個(gè)主區(qū)域 配置節(jié)處理程序聲明區(qū)域和配置節(jié)設(shè)置區(qū)域 配置節(jié)處理程序聲明出現(xiàn)在配置文件頂部和標(biāo)記之間 包含在標(biāo)記中的每個(gè)聲明都指定提供特定配置數(shù)據(jù)集的節(jié)的名稱和處理該節(jié)中配置數(shù)據(jù)的 NET框架類的名稱 配置節(jié)設(shè)置區(qū)域位于區(qū)域之后 它包含實(shí)際的配置設(shè)置 區(qū)域中的每個(gè)聲明都有一個(gè)配置節(jié) 每個(gè)配置節(jié)都包含子標(biāo)記 這些子標(biāo)記帶有包含該節(jié)設(shè)置的屬性 3 WebConfig文件詳解 節(jié)作用 配置ASP NET身份驗(yàn)證支持 為Windows Forms PassPort None四種 該元素只能在計(jì)算機(jī) 站點(diǎn)或應(yīng)用程序級(jí)別聲明 元素必需與節(jié)配合使用 節(jié)作用 控制對(duì)URL資源的客戶端訪問 如允許匿名用戶訪問 此元素可以在任何級(jí)別 計(jì)算機(jī) 站點(diǎn) 應(yīng)用程序 子目錄或頁(yè) 上聲明 必需與節(jié)配合使用 節(jié)作用 配置ASP NET使用的所有編譯設(shè)置 默認(rèn)的debug屬性為 True 在程序編譯完成交付使用之后應(yīng)將其設(shè)為True Web config文件中有詳細(xì)說明 此處省略示例 作用 為ASP NET應(yīng)用程序提供有關(guān)自定義錯(cuò)誤信息的信息 它不適用于XMLWebservices中發(fā)生的錯(cuò)誤 節(jié)作用 配置ASP NETHTTP運(yùn)行庫(kù)設(shè)置 該節(jié)可以在計(jì)算機(jī) 站點(diǎn) 應(yīng)用程序和子目錄級(jí)別聲明 作用 標(biāo)識(shí)特定于頁(yè)的配置設(shè)置 如是否啟用會(huì)話狀態(tài) 視圖狀態(tài) 是否檢測(cè)用戶的輸入等 可以在計(jì)算機(jī) 站點(diǎn) 應(yīng)用程序和子目錄級(jí)別聲明 作用 為當(dāng)前應(yīng)用程序配置會(huì)話狀態(tài)設(shè)置 如設(shè)置是否啟用會(huì)話狀態(tài) 會(huì)話狀態(tài)保存位置 作用 配置ASP NET跟蹤服務(wù) 主要用來程序測(cè)試判斷哪里出錯(cuò) 4 自定義Web config文件配置節(jié)自定義Web config文件配置節(jié)過程分為兩步 一是在在配置文件頂部和標(biāo)記之間聲明配置節(jié)的名稱和處理該節(jié)中配置數(shù)據(jù)的 NETFramework類的名稱 二是在區(qū)域之后為聲明的節(jié)做實(shí)際的配置設(shè)置 5 訪問Web config文件你可以通過使用ConfigurationSettings AppSettings靜態(tài)字符串集合來訪問 Web config文件配置節(jié)和訪問范例 6 4Global asax文件 開發(fā)應(yīng)用程序的時(shí)候 有時(shí)候需要編寫一些處理程序級(jí)別的事件以及添加程序級(jí)別的邏輯代碼 這些代碼并不會(huì)處理單個(gè)的頁(yè)面請(qǐng)求 而是用于處理高層的應(yīng)用程序級(jí)別的事件 比如Application Star Application End Application Error Session Start Session End等 這些代碼是放在Global asax文件中 Global asax文件繼承自HttpApplication類 它維護(hù)一個(gè)HttpApplication對(duì)象池 并在需要時(shí)將對(duì)象池中的對(duì)象分配給應(yīng)用程序 Global asax文件包含以下事件 1 Application Init 在應(yīng)用程序被實(shí)例化或第一次被調(diào)用時(shí) 該事件被觸發(fā) 對(duì)于所有的HttpApplication對(duì)象實(shí)例 它都會(huì)被調(diào)用 2 Application Disposed 在應(yīng)用程序被銷毀之前觸發(fā) 這是清除以前所用資源的理想位置 3 Application Error 當(dāng)應(yīng)用程序中遇到一個(gè)未處理的異常時(shí) 該事件被觸發(fā) 4 Application Start 在HttpApplication類的第一個(gè)實(shí)例被創(chuàng)建時(shí) 該事件被觸發(fā) 它允許你創(chuàng)建可以由所有HttpApplication實(shí)例訪問的對(duì)象 5 Application End 在HttpApplication類的最后一個(gè)實(shí)例被銷毀時(shí) 該事件被觸發(fā) 在一個(gè)應(yīng)用程序的生命周期內(nèi)它只被觸發(fā)一次 6 Application BeginRequest 在接收到一個(gè)應(yīng)用程序請(qǐng)求時(shí)觸發(fā) 對(duì)于一個(gè)請(qǐng)求來說 它是第一個(gè)被觸發(fā)的事件 請(qǐng)求一般是用戶輸入的一個(gè)頁(yè)面請(qǐng)求 URL 7 Application EndRequest 針對(duì)應(yīng)用程序請(qǐng)求的最后一個(gè)事件 8 Application PreRequestHandlerExecute 在ASP NET頁(yè)面框架開始執(zhí)行諸如頁(yè)面或Web服務(wù)之類的事件處理程序之前 該事件被觸發(fā) 9 Application PostRequestHandlerExecute 在ASP NET頁(yè)面框架結(jié)束執(zhí)行一個(gè)事件處理程序時(shí) 該事件被觸發(fā) 10 Applcation PreSendRequestHeaders 在ASP NET頁(yè)面框架發(fā)送HTTP頭給請(qǐng)求客戶 瀏覽器 時(shí) 該事件被觸發(fā) 11 Application PreSendContent 在ASP NET頁(yè)面框架發(fā)送內(nèi)容給請(qǐng)求客戶 瀏覽器 時(shí) 該事件被觸發(fā) 12 Application AcquireRequestState 在ASP NET頁(yè)面框架得到與當(dāng)前請(qǐng)求相關(guān)的當(dāng)前狀態(tài) Session狀態(tài) 時(shí) 該事件被觸發(fā) 13 Application ReleaseRequestState 在ASP NET頁(yè)面框架執(zhí)行完所有的事件處理程序時(shí) 該事件被觸發(fā) 這將導(dǎo)致所有的狀態(tài)模塊保存它們當(dāng)前的狀態(tài)數(shù)據(jù) 14 Application ResolveRequestCache 在ASP NET頁(yè)面框架完成一個(gè)授權(quán)請(qǐng)求時(shí) 該事件被觸發(fā) 它允許緩存模塊從緩存中為請(qǐng)求提供服務(wù) 從而繞過事件處理程序的執(zhí)行 15 Application UpdateRequestCache 在ASP NET頁(yè)面框架完成事件處理程序的執(zhí)行時(shí) 該事件被觸發(fā) 從而使緩存模塊存儲(chǔ)響應(yīng)數(shù)據(jù) 以供響應(yīng)后續(xù)的請(qǐng)求時(shí)使用 16 Application AuthenticateRequest 在安全模塊建立起當(dāng)前用戶的有效的身份時(shí) 該事件被觸發(fā) 在這個(gè)時(shí)候 用戶的憑據(jù)將會(huì)被驗(yàn)證 17 Application AuthorizeRequest 當(dāng)安全模塊確認(rèn)一個(gè)用戶可以訪問資源之后 該事件被觸發(fā) 18 Session Start 在一個(gè)新用戶訪問應(yīng)用程序Web站點(diǎn)時(shí) 該事件被觸發(fā) 19 Session End 在一個(gè)用戶的會(huì)話超時(shí) 結(jié)束或他們離開應(yīng)用程序Web站點(diǎn)時(shí) 該事件被觸發(fā) Global asax文件使用范例 6 5ADO NET數(shù)據(jù)庫(kù)訪問技術(shù) ADO NET是微軟在 NET平臺(tái)下一種全新的數(shù)據(jù)庫(kù)訪問機(jī)制 ADO NET滿足了ADO無法滿足的三個(gè)重要需求 為適應(yīng)Web環(huán)境的編程需要提供了斷開的數(shù)據(jù)訪問模型 提供了與XML的緊密集成 提供了與 NET框架的無縫連接 6 5 1Connection對(duì)象 數(shù)據(jù)庫(kù)應(yīng)用程序與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互 首先必須建立與數(shù)據(jù)庫(kù)的連接 ADO NET中 使用Connection對(duì)象完成此項(xiàng)功能 在這里要指出的是在創(chuàng)建連接之間要在程序中添加System Data和System Data SqlClient兩個(gè)命名空間 建立與數(shù)據(jù)庫(kù)的連接是通過數(shù)據(jù)庫(kù)連接字符串來實(shí)現(xiàn)的 在連接字符串中要設(shè)置一些參數(shù)的值 連接SqlServer數(shù)據(jù)庫(kù)的常用參數(shù)如下表所示 Connection對(duì)象常用的方法如下表所示 Connection對(duì)象使用范例 6 5 2Command對(duì)象 常用的Command對(duì)象的屬性有以下幾種 CommandText屬性 獲取或設(shè)置要對(duì)數(shù)據(jù)源執(zhí)行的sql命令 存儲(chǔ)過程或者數(shù)據(jù)表名稱 當(dāng)調(diào)用ExecuteNuery ExecuteReader ExecuteScalar ExecuteXmlReader中的任意一個(gè)方法時(shí) Command對(duì)象會(huì)執(zhí)行CommandText屬性所指定的內(nèi)容 CommandTimeout屬性 獲取或設(shè)置Command對(duì)象超時(shí)時(shí)間 單位為秒 默認(rèn)為30 如果Command對(duì)象在30秒時(shí)間內(nèi)不能執(zhí)行CommandText屬性設(shè)定的內(nèi)容便返回失敗 CommandType屬性 獲取或設(shè)置CommandText屬性代表的意義 可以為CommandType StoreProcedure 存儲(chǔ)過程 CommandType Text等 默認(rèn)為Text Parameters屬性 獲取ParameterCollectionConnection屬性 獲取或設(shè)置Command對(duì)象要使用的數(shù)據(jù)連接 值為Connectiion對(duì)象 常用的Command對(duì)象的方法有以下幾種 Cancle 取消Command對(duì)象的執(zhí)行 CreateParameter 執(zhí)行CommandText屬性指定的內(nèi)容 并返回被影響的列數(shù) 只有update insert delete三個(gè)sql語(yǔ)句回返回被影響的列數(shù) 其他的返回的都是 1ExecuteReader 執(zhí)行CommandText屬性指定的內(nèi)容 并創(chuàng)建DataReader對(duì)象ExecuteScalar 執(zhí)行CommandText屬性指定的內(nèi)容 返回結(jié)果的第一行第一列的值 次方法只用于執(zhí)行select語(yǔ)句Command對(duì)象使用范例 6 5 3DataReader對(duì)象 DataReader是用來從數(shù)據(jù)庫(kù)中檢索只讀 只進(jìn)的數(shù)據(jù)流 使用DataReader可以提高應(yīng)用程序的性能 因?yàn)橐坏?shù)據(jù)可用 DataReader就立即檢索該數(shù)據(jù) 而不是等待返回查詢的全部結(jié)果 并且在默認(rèn)情況下 DataReader一次在內(nèi)存中只存儲(chǔ)一行記錄 從而降低了系統(tǒng)開銷 常用的DataReader對(duì)象的屬性有如下幾種 FieldCount屬性 該屬性用來表示由DataReader得到的一行數(shù)據(jù)中的字段數(shù) HasRows屬性 該屬性用來表示DataReader是否包含數(shù)據(jù) IsClosed屬性 該屬性用來表示DataReader對(duì)象是否關(guān)閉 Item name ordinal 屬性 該屬性用來獲取或設(shè)置字段內(nèi)容 name為字段名 ordinal為字段序號(hào) 可選用 常見的DataReader對(duì)象的方法有如下幾種 1 Close方法Close方法不帶參數(shù) 無返回值 用來關(guān)閉DataReader對(duì)象 由于DataReader在執(zhí)行SQL命令時(shí)一直要保持同數(shù)據(jù)庫(kù)的連接 所以在DataReader對(duì)象開啟的狀態(tài)下 該對(duì)象所對(duì)應(yīng)的Connection連接對(duì)象不能用來執(zhí)行其他的操作 所以 在使用完DataReader對(duì)象時(shí) 一定要使用Close方法關(guān)閉該DataReader對(duì)象 否則不僅會(huì)影響到數(shù)據(jù)庫(kù)連接的效率 更會(huì)阻止其他對(duì)象使用Connection連接對(duì)象來訪問數(shù)據(jù)庫(kù) 2 Read 方法boolRead 方法會(huì)讓記錄指針指向本結(jié)果集中的下一條記錄 返回值是true或false 當(dāng)Command的ExecuteReader方法返回DataReader對(duì)象后 須用Read方法來獲得第一條記錄 當(dāng)讀好一條記錄想獲得下一下記錄時(shí) 也可以用Read方法 如果當(dāng)前記錄已經(jīng)是最后一條 調(diào)用Read方法將返回false 也就是說 只要該方法返回true 則可以訪問當(dāng)前記錄所包含的字段 3 NextResult 方法NextResult 方法會(huì)讓記錄指針指向下一個(gè)結(jié)果集 當(dāng)調(diào)用該方法獲得下一個(gè)結(jié)果集后 依然要用Read方法來開始訪問該結(jié)果集 4 GetValue inti 方法GetValue inti 方法根據(jù)傳入的列的索引值 返回當(dāng)前記錄行里指定列的值 由于事先無法預(yù)知返回列的數(shù)據(jù)類型 所以該方法使用Object類型來接收返回?cái)?shù)據(jù) 5 GetValues Object values 方法GetValues Object values 方法會(huì)把當(dāng)前記錄行里所有的數(shù)據(jù)保存到一個(gè)數(shù)組里并返回 可以使用FieldCount屬性來獲知記錄里字段的總數(shù) 據(jù)此定義接收返回值的數(shù)組長(zhǎng)度 6 獲得指定字段的方法獲得指定字段的方法有GetString GetChar GetInt32等 這些方法都帶有一個(gè)表示列索引的參數(shù) 返回均是Object類型 用戶可以根據(jù)字段的類型 通過輸入列索引 分別調(diào)用上述方法 獲得指定列的值 例如 在數(shù)據(jù)庫(kù)里 id的列索引是0 通過stringid GetString 0 代碼可以獲得id的值 7 返回列的數(shù)據(jù)類型和列名的方法可以調(diào)用GetDataTypeName 方法 通過輸入列索引 獲得該列的類型 這個(gè)方法的定義是 stringGetDataTypeName inti 可以調(diào)用GetName 方法 通過輸入列索引 獲得該列的名稱 這個(gè)方法的定義是 stringGetName inti 綜合使用上述兩方法 可以獲得數(shù)據(jù)表里列名和列的字段 8 IsDBNull inti 方法 boolIsDBNull inti 方法的參數(shù)用來指定列的索引號(hào) 該方法用來判斷指定索引號(hào)的列的值是否為空 返回True或False DataReader對(duì)象的使用范例 6 5 4Dataset對(duì)象與DataAdapter對(duì)象 DataSet對(duì)象在ADO NET中是一個(gè)全新的概念 也是ADO NET中一個(gè)最為重要的對(duì)象 DataSet是一種簡(jiǎn)單并駐留在內(nèi)存中的數(shù)據(jù)存儲(chǔ)方式 它作為一個(gè)相對(duì)獨(dú)立的實(shí)體 包含了全套數(shù)據(jù) 包括約束 關(guān)系 設(shè)置多表 DataSet雖然擁有類似于數(shù)據(jù)庫(kù)的結(jié)構(gòu) 但并不等同于數(shù)據(jù)庫(kù) 首先 DataSet不僅可以存儲(chǔ)來自于數(shù)據(jù)庫(kù)中的數(shù)據(jù) 而且還可以存儲(chǔ)其他類型的數(shù)據(jù) 如XML格式文檔 其次DataSet與數(shù)據(jù)庫(kù)之間沒有直接的聯(lián)系 操作DataSet并不等同于數(shù)據(jù)庫(kù)中的數(shù)據(jù)也會(huì)發(fā)生改變 在DataSet上執(zhí)行的UPDATE 更新 或Delete 刪除 等操作 影響的僅僅是DataSet中存儲(chǔ)的數(shù)據(jù) 而不會(huì)在數(shù)據(jù)庫(kù)中執(zhí)行相同的操作 DataSet對(duì)象的常用屬性如下表所示 DataSet對(duì)象的常用方法如下表所示 DataAdapter對(duì)象是一種用來充當(dāng)DataSet與實(shí)際數(shù)據(jù)源之間橋梁的對(duì)象 ADO NET通過該對(duì)象建立并初始化DataTable DataSet中的數(shù)據(jù)表 從而與DataSet結(jié)合在一起 DataAdapter對(duì)象在數(shù)據(jù)庫(kù)操作中與DataSet配合使用 可以執(zhí)行新增 查詢 修改和刪除等多種操作 DataAdapter對(duì)象的常用屬性如下表所示 DataAdapter對(duì)象的常用方法如下表所示 Dataset對(duì)象與DataAdapter對(duì)象使用范例 下圖給出了DataSet對(duì)象的模型結(jié)構(gòu) DataView對(duì)象 DataView對(duì)象表示DataSet對(duì)象中數(shù)據(jù)的定制視圖 他代表一個(gè)DataTable的數(shù)據(jù)查看方式 DataView對(duì)象可以指定篩選條件來選擇查看單個(gè)數(shù)據(jù)表或多個(gè)數(shù)據(jù)表中的部分?jǐn)?shù)據(jù) 也可以指定與默認(rèn)查看方式不同的排序方式 DataView對(duì)象的常用屬性如下表所示 DataView對(duì)象的常用屬性如下表所示 DataView對(duì)象使用范例 6 5 5執(zhí)行存儲(chǔ)過程 存儲(chǔ)過程是保存起來的可以接受和返回用戶提供的參數(shù)的Transact SQL語(yǔ)句的集合 在存儲(chǔ)過程中可以使用數(shù)據(jù)存取語(yǔ)句 流程控制語(yǔ)句 錯(cuò)誤處理語(yǔ)句等 其主要特點(diǎn)是執(zhí)行效率高 可以重復(fù)使用 在應(yīng)用程序中使用存儲(chǔ)過程一般性的步驟是 1 創(chuàng)建存儲(chǔ)過程 2 建立與相應(yīng)數(shù)據(jù)庫(kù)的連接 3 調(diào)用存儲(chǔ)過程 4 在程序中說明執(zhí)行的類型是存儲(chǔ)過程 5 若要執(zhí)行的存儲(chǔ)過程有參數(shù)則完成填充Parameters集合 否則此步省略 6 執(zhí)行存儲(chǔ)過程應(yīng)用程序中使用存儲(chǔ)過程范例 6 5 6數(shù)據(jù)庫(kù)事務(wù)處理 事務(wù)處理是把一組操作合并為一個(gè)邏輯上的工作單元 在系統(tǒng)中沒有出現(xiàn)錯(cuò)誤的情況下 開發(fā)人員可以使用事務(wù)處理來控制并保持事務(wù)處理中每一個(gè)動(dòng)作的連續(xù)性和完整性 在ADO NET中 可以使用Connection和Transaction對(duì)象啟動(dòng) 提交和回滾事務(wù) 若要執(zhí)行事務(wù) 請(qǐng)執(zhí)行下列操作 調(diào)用Connection對(duì)象的BeginTransaction方法來標(biāo)記事務(wù)的開始 BeginTransaction方法返回對(duì)Transaction的引用 該引用將分配給登記在事務(wù)中的Command對(duì)象 將Transaction對(duì)象分配給要執(zhí)行的Command的Transaction屬性 如果通過活動(dòng)的Transaction對(duì)象對(duì)Connection執(zhí)行Command 但該Transaction對(duì)象尚未分配給Command的Transaction屬性 則將引發(fā)異常 事物處理是通過SqlTransaction類來實(shí)現(xiàn)的 此類包括了兩個(gè)屬性 Connection 指示同事務(wù)處理相關(guān)聯(lián)的SqlConnection對(duì)象 IsolationLevel 定義事務(wù)處理的IsolationLevel 屬性IsolationLevel是包括如下成員的枚舉對(duì)象 1 Chaos 從高度獨(dú)立的事務(wù)處理中出現(xiàn)的pendingchanges不能被覆蓋 2 ReadCommitted 當(dāng)數(shù)據(jù)需要被非惡意讀取時(shí) 采用共享鎖定 sharedlocks 但數(shù)據(jù)仍然可以在事務(wù)處理結(jié)束時(shí)被更新 這造成了非重復(fù)性的數(shù)據(jù)讀取 nonrepeatablereads 或phantomdata的產(chǎn)生 3 ReadUncommitted 惡意讀取數(shù)據(jù)是可能發(fā)生的 這表示沒有使用共享鎖定 sharedlocks 并且沒有實(shí)現(xiàn)獨(dú)占鎖定 exclusivelocks 4 RepeatableRead 鎖定查詢中所用到的所有數(shù)據(jù) 由此避免其他用戶對(duì)數(shù)據(jù)進(jìn)行更新 在phantomrows仍然可用的狀態(tài)下 這可以避免非重復(fù)性的數(shù)據(jù)讀取 nonrepeatablereads 5 IsolationLevel定義鎖定記錄的級(jí)別 但這一概念不在本文論述范圍之內(nèi) 對(duì)象SqlTransaction也提供了類似的方法 你可以使用以下方法來進(jìn)行事務(wù)處理 6 Commit 提交數(shù)據(jù)庫(kù)事務(wù)處理 7 Rollback 從未決狀態(tài) pendingstate 反轉(zhuǎn) rollback 事務(wù)處理 事務(wù)處理一旦被提交后即不能執(zhí)行此操作 8 Save 在事務(wù)處理中創(chuàng)建savepoint可以對(duì)事務(wù)處理的一部分進(jìn)行反轉(zhuǎn) 并且指定savepoint名稱 事物處理范例 6 5 7跨數(shù)據(jù)庫(kù)訪問 進(jìn)行跨庫(kù)查詢的時(shí)候回遇到兩種情況 一是被操作的兩個(gè)數(shù)據(jù)庫(kù)位于同一臺(tái)物理機(jī)器上 一是被操作的兩個(gè)數(shù)據(jù)庫(kù)位于不同的物理機(jī)器上 下面分別對(duì)這兩種情況進(jìn)行說明 1 被操作的兩個(gè)數(shù)據(jù)庫(kù)位于同一臺(tái)物理機(jī)器上這時(shí)我們需要在構(gòu)造的sql語(yǔ)句中的表名前加上數(shù)據(jù)庫(kù)和DBO就可以 形如select fromDB1 DBO Table1我們?cè)诔绦蛑薪⒌呐c數(shù)據(jù)庫(kù)的連接不需要改變 2 被操作的數(shù)據(jù)庫(kù)位于不同的物理機(jī)器上這時(shí)需要我們將另一數(shù)據(jù)庫(kù)所在的機(jī)器連接過來 同時(shí)對(duì)sql語(yǔ)句進(jìn)行構(gòu)造實(shí)現(xiàn)功能假設(shè)當(dāng)前ServerName MyCurrentServer 其中一個(gè)TableName MyCurrentTable 鏈接的數(shù)據(jù)庫(kù)Servername MyLinkedServer DatabaseName MyLinkedDB 其中的一個(gè)TableName MyLinkedTable 則你的SQL語(yǔ)句可以這樣寫 selectA B fromMyCurrentTableA MyLinkedServer MyLinkedDB dbo MyLinkedTableB 跨庫(kù)處理范例 6 5 8數(shù)據(jù)綁定技術(shù) 數(shù)據(jù)綁定技術(shù)最通常的應(yīng)用是把Web控件中用于顯示的屬性跟數(shù)據(jù)源綁到一起 從而在Web頁(yè)面上顯示數(shù)據(jù) 此外 也可以使用數(shù)據(jù)綁定技術(shù)設(shè)置Web控件的其他屬性 因此可以說 ASP NET的數(shù)據(jù)綁定技術(shù)非常靈活 數(shù)據(jù)源可以是數(shù)據(jù)庫(kù)中的數(shù)據(jù) 也可以是XML文檔 其他控件的- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Web 開發(fā) 實(shí)用技術(shù) 應(yīng)用程序 技術(shù)
鏈接地址:http://m.appdesigncorp.com/p-6391943.html