熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET數據庫編程快速入門之技術慨述

2013-11-13 10:05:06  來源: .NET編程 

  大約有將近一百萬名開發人員使用 Framework的第一個版本來開發網站所以在年的夏天當從Microsoft傳出將有新版本發布的傳聞時許多人的耳朵都豎了起來這個新的版本將使得創建ASPNET頁面所需的代碼行數減少%像這樣大規模的提高生產效率在程序設計中是不多見的當ASPNET 的代碼樣例在年秋的Microsoft專業開發人員大會(Microsoft Professional Developers Conference)上演示時結果比預計的還要好以前使用ASPNET的第一個版本程序員需要花費幾個小時才能做出的頁面現在使用ASPNET 只需要幾分鐘就完成了簡單來說NET Framework 最終版本發布之後任何繼續使用第一個版本創建ASPNET頁面的程序人員都將花費大量的額外時間才能達到相同的結果

  也許就像其他任何領域一樣ASPNET 所提供的優勢是能夠方便地將數據集成進頁面程序員不再需要知道詳細的連接命令以及數據閱讀器和數據適配器對象就能執行普通數據任務了對於初學者掌握能力ASPNET 使得基本數據的使用簡單易學並且有能力進行更復雜的數據應用

  NET Framework

  Microsoft開發出了作為基本原理的NET和一系列技術用於在互聯網中讓計算機共同工作總的目標就是讓信息和進程在大范圍的系統和設備之間順暢地交流NET不是一種語言也不是一個特別的產品更確切地說它是一套標准和規范並已經應用於自年以來Microsoft發布的所有產品中

  NET包含了一種使用開放標准的XML格式交換信息的標准化格式可擴展標記語言(Extensible Markup LanguageXML)不需要請求者具備任何有關數據存儲如何保存信息的專門知識—— 數據都以自描述的XML格式取出同樣地目前幾乎所有的數據存儲都可以用XML來提供信息這對於所有NET數據客戶都具有吸引力

  NET支持軟件的Web Services標准可請求在使用了開放平台標准的簡單對象訪問協議(Simple Object Access ProtocolSOAP)和XML的遠程軟件上運行代碼NET網站可以從另外一個網站上找到該網站所提供的服務並使用這些服務這樣可以使得網站從其他的網站上獲得HTML計算後的結果或者數據集

  作為NET開端的一部分Microsoft發布了一套運行時編程工具和應用編程接口(API)稱為NET Framework讓開發團隊能夠創建NET應用程序和XML Web ServicesNET Framework由公共語言運行庫(Common Language RuntimeCLR)和一套統一的類庫組成

  CLR為運行的應用程序提供了一個完全管理的執行環境其中包括幾個服務例如程序集裝載和卸載進程和內存的管理安全實施以及即時編譯等CLR名稱的意思就是指能夠用多種語言編寫應用程序並且將源代碼編譯成CLR能夠讀懂並運行的中間語言而無需考慮原來所使用的語言這種語言獨立性就是CLR的關鍵特性(也是ASPNET的特性)它允許開發人員使用自己喜歡的語言工作比如C#VB或者Cobol都能夠獲得NET Framework的常用特性

  NET Framework還包括了一套類庫這套類庫提供了每一個應用程序所需的常用功能可以使用NET Framework支持的任何語言來訪問這些類庫由這些類庫提供的服務(以及相應的命名空間)如下

  · 基本類型(System)

  · 輸入/輸出(SystemIO)

  · 數據訪問(SystemData)

  · 安全(SystemSecurity)

  · 數據結構(SystemCollections)

  · 配置(SystemConfiguration)

  · 連網(SystemNet)

  · 反射(SystemReflection)

  · 全球化(SystemGlobalization)

  · 繪畫和制圖(SystemDrawing)

  · 跟蹤和診斷(SystemDiagnostics)

  · 窗口(客戶端)應用程序模型(SystemWindowsForms)

  · Web應用程序模型(SystemWeb)

  注意NET Framework包含了兩個應用程序編程模型一個用於客戶端應用程序(SystemWindowsForms)另一個用於基於Web的應用程序(SystemWeb)本書著重講解後一個模型NET Framework中的SystemWeb命名空間是NET Framework的一部分它提供了ASPNET功能換句話說ASPNET就是構建應用程序的所有NET Framework的一部分


  ASPNET是一種用於創建基於Web的應用程序的編程模型從本質上來說運行時和NET Framework類庫集可以用於創建動態Web頁它需要在Web服務器的環境中運行例如Microsoft Internet Information Server(Microsoft互聯網信息服務器IIS)並且根據服務浏覽器請求指示在服務器上執行程序與直接由Web服務器提供的靜態HTML不同的是ASPNET頁面實際上是在服務器上執行以後再產生結果的頁面的最後生成也許是由許多不同的指令和/或數據源構造的

  ASPNET頁面以aspx擴展名存儲頁面由程序員將文本標記(例如HTML)以及ASPNET特定服務器標記和腳本組合在一起然後存儲在Web服務器上可以將存儲後的ASPNET頁面看成是一套描述如何創建一個HTML頁面的指令當該頁面被請求浏覽時服務器端程序將會用純標記來創建一個客戶端浏覽器可以讀懂並能呈現(render)的頁面因為呈現後的輸出是純標記所以任何浏覽器都能夠讀懂所有的動態過程都發生在Web服務器端ASPNET特定服務器標記非常強大例如它可以對用戶的動作作出反應連接至數據存儲以及自動創建非常復雜的HTML結構

  正像前面提到的那樣ASPNET只是NET Framework的一部分所以 ASPNET頁面可以利用這個框架提供的所有服務包括連網數據訪問安全以及更多其他服務因為ASPNET可以使用所有這些服務所以相比以前能夠創建更加豐富的Web應用程序只需花少量的時間來構建所有應用程序所需的構建塊而將大多數時間用在應用程序獨有的特殊邏輯上

  ASPNET還在Web編程中引入了一些獨特的新技術可以在典型的動態服務器頁面(Active Server PagesASP)上極大地改善開發模式

  · 語言獨立性——因為ASPNET是NET Framework的一部分所以可以使用您自己選擇的語言來構建ASPNET應用程序例如C#VB或J#而典型的ASP則僅限於JScript或者VBScript頁面

  · 編譯而不是解釋——與典型的ASP在每一次頁面請求時都解釋編程結構不同ASPNET在服務器端動態地將頁面編譯成可以運行得非常快的本機編程指令可以很明顯地看到典型的ASP頁面的性能與相同ASPNET頁面的性能之間相差的數量級別

  · 事件驅動編程模式——在典型的ASP中頁面總是以自頂向下的線性方式執行並且HTML標記常常與程序指令混合在一起任何一個有一定ASP經驗的人都知道這樣會使得頁面難以閱讀甚至更加難以維護ASPNET引入了事件驅動模型這個模型允許您將代碼與標記內容分離將代碼並入處理專門任務的有意義的單元中例如響應客戶端的按鈕單擊動作這個類似VB的事件模型極大地提高了頁面的可讀性和可維護性

  · 服務器控件——典型的ASP需要動態地將HTML片斷代碼接合在一起呈現這樣做的結果就是在應用程序中一遍又一遍地編寫相同的代碼(您需要多少次才能從數據庫查詢中構建一張表格)ASPNET帶給Web編程的一個最大的好處就是能夠將公共的呈現和行為封裝成服務器控件(server control)可以在應用程序中很方便地重復使用就像HTML標記一樣服務器控件以聲明的形式創建但是表現為一個位於服務器端的可編程對象它可以與代碼進行交互並輸出定制的動態HTML呈現ASPNET包含了大約多個服務器控件這些控件封裝了從標准表單元素到復雜控件(如網格和菜單)的所有內容

  · 控件設計時間的改善(當使用Visual Web Developer時)—— 開發人員通過使用設計時間界面可以減少花費在開發復雜頁面上的時間這些界面包括敏捷任務面板標簽級導航欄和可以設置控件屬性的向導 ASPNET

  ASPNET的第一個版本()在年至年間迅速風靡了Microsoft的開發陣營程序人員很快便感覺到他們通過使用強大和靈活的NET Framework可以大大減少編碼時間而且CIO們也看到當程序員花在解決客戶代碼的疑難問題上的時間減少時他們就可以將更多的資源投入到更高級的IT結構的改善上ASPNET確實是一個裡程碑式的版本它簡化了開發人員的工作

  但是就在第一個版本發布之前Microsoft的ASPNET小組就已經在為開發ASPNET 而工作了他們以下面雄心勃勃的目標來開始他們的工作

  · 使創建一個典型的Web應用程序所需代碼行數減少%

  · 提供一套可擴展的應用程序服務用來為通用應用程序任務提供構建塊例如成員角色個人化以及導航等

  · 創建一系列基於任務的服務器控件這些控件可以調節上述服務交付完全可定制的用戶接口(UI)以最小的代碼量來展示這些服務

  · 當與NET Framework協同工作提供頁面服務時改善IIS的性能

  · 提供管理功能以便加強ASPNET服務器的部署管理和運行

  · 改善宿主公司所用的工具以便可以支持多站點並能夠將開發人員的項目遷移至公共部署環境

  · 讓ASPNET的幾乎所有特性都能夠方便地擴展或者用定制的高級任務的執行替換 在這裡我們有必要再來細細地回想一下第一個目標也就是使編寫一個動態Web應用程序所需的代碼量減少%這有可能嗎?Microsoft的ASPNET小組已經仔細考慮過各種以定制代碼執行的通用任務並且專門制定了將這些任務封裝進構建塊(特別是服務器控件)的方式這樣就能夠自動地完成這些任務了例如大多數Web應用程序都需要安全或者導航或者個性化服務來為用戶提供定制的體驗在ASPNET 這些任務是通過一系列可配置的應用程序服務以及與這些應用程序服務進行對話的服務器控件來實現的這樣可以極大地減少實施這些通用服務所需的應用程序的代碼量但是在所有這些通用任務當中有一個任務是絕對獨立於其他應用程序的這就是數據訪問服務數據是驅動所有動態Web應用程序的公用線程所以毫不奇怪ASPNET小組為了減少代碼量和在ASPNET 的應用程序中執行數據訪問所需的概念而制訂了一些大膽的目標

  · 在ASPNET中可以通過聲明的(無代碼)方式來定義一個數據源

  · 可以通過聲明的(無代碼)方式用UI控件顯示數據無需在頁面的執行生存期中的特定時間進行顯式的數據綁定

  · 可以通過聲明的(無代碼)方式執行通用數據任務例如排序分頁過濾更新插入以及刪除數據

  · 可以使用多種UI控件來顯示數據包括靈活的網格/詳細控件該控件既可以顯示又可以操作數據

  · 為創建定制的數據源啟用可擴展的模型來支持新的數據類型

  ASPNET 具有一些程序員可以使用的特定的服務器控件用於在頁面上添加數據交互這些專門的數據控件分為兩組數據源控件和數據綁定控件數據源控件創建與數據庫的鏈接數據綁定控件則從數據源控件獲取信息並在頁面上創建呈現這種簡單的雙控件模式可用於多種情況對於多種數據庫類型甚至是非關系型數據源都有相應的數據源控件同樣地有多種數據綁定控件可用來在頁面上生成表格樹型列表以及其他數據格式在前面我們已對ASPNET進行了介紹同時講述了ASPNET的一些理論現在開始介紹本書剩余部分的細節內容數據源控件和數據綁定控件的使用數據源控件以及附帶產品包括如下條目

  · SqlDataSource控件用於與Microsoft SQL Server和其他數據庫進行連接

  · AccessDataSource控件用於與MDB文件連接

  · ObjectDataSource控件用於與中間層對象連接

  · XMLDataSource控件用於XML文件或者數據流

  · SiteMapDataSource控件用於以ASPNET 站點地圖格式存儲的XML文件額外的控件已經由第三方開發

  在數據綁定控件中有很多與ASPNET x中的相似有一些則是ASPNET 全新開發的

  · ListBoxDropDownList和BulletedListCheckBoxListRadioButtonList

  · AdRotator是實現舊功能的數據綁定控件

  · DataList和Repeater以靈活的布局方式提供數據

  · DataGrid(與ASPNET x中的相同)和GridView(第個版本中的新控件)用於表格數據

  · DetailsView和FormView以輕松的導航提供記錄的信息

  · TreeView用於顯示分級數據

  總之數據源控件和數據綁定控件將會是本書重點介紹的對象

  在NET Framework 公開beta版本發布之前少數的幾個程序組就已經被允許查看工作代碼並希望盡快獲得他們的反饋結果所有的反應只有一個那就是熱烈太好了!然後就是什麼時候我才能用ASPNET 替換我的ASPNET x應用程序?現在beta發布版本已經在手邊我們無需再等待了

  ADONET

  是NET Framework中的一套類庫它將會讓您更加方便地在應用程序中使用數據Microsoft收集了過去幾十年中最佳的數據連接的實踐操作並編寫代碼實現這些實踐這些代碼被包裝進了一些對象中以便其他軟件可以方便地使用

  ADONET中的代碼處理了大量的數據庫特有的復雜情況所以當ASPNET頁面設計人員想讀取或者寫入數據時他們只需編寫少量的代碼並且這些代碼都是標准化的就像ASPNET一樣ADONET不是一種語言它是對象(類)的集合在對象(類)中包含了由Microsoft編寫的代碼可以使用諸如Visual Basic或者C#等編程語言來在對象外部運行這些代碼

  可以將ADONET看作是一個介於數據源和數據使用者之間的非常靈巧的轉換層ADONET可以接受數據使用者語言中的命令然後將這些命令轉換成在數據源中可以正確執行任務的命令但是就像您將會看到的那樣ASPNET 提供了服務器端數據控件可以更方便地與ADONET交互工作所以有的時候這基本上減少了直接使用ADONET對象的需求

  很多讀者已經有使用ASPNET早期版本的經驗了這一小節將回顧一下這種模式目的是演示您需要通過ADONET對象將數據引入Web頁中的這一過程對那些從來都沒有使用過早期版本的讀者來說可以將本小節作為一個新奇的故事類似於在發現乙醚之前進行的外科技術研究在以前創建一個簡單典型的ASPNET x版本的頁面需要如下代碼

<script runat=server

Sub Page_Load(ByVal sender As Object ByVal e As SystemEventArgs)

BulletedListDataSource = GetAuthorsByState(CA)

BulletedListDataBind()

End Sub

Shared Function GetAuthorsByState(ByVal state As String) As SystemDataDataSet

Dim connectionString As String =

server=(local); database=pubs; trusted_connection=true

Dim dbConnection As SystemDataIDbConnection = New SystemDataSqlClientSqlConnection(connectionString)

Dim queryString As String = SELECT [authors][au_id] [authors][au_fname] [authors][au_lname] [authors]

[state] FROM [authors] WHERE ([authors][state] = @state)

Dim dbCommand As SystemDataIDbCommand = New SystemDataSqlClientSqlCommand

dbCommandCommandText = queryString

dbCommandConnection = dbConnection

Dim dbParam_state As SystemDataIDataParameter = New SystemDataSqlClientSqlParameter

dbParam_stateParameterName = @state

dbParam_stateValue = state

dbParam_stateDbType = SystemDataDbTypeStringFixedLength

dbCommandParametersAdd(dbParam_state)

Dim dataAdapter As SystemDataIDbDataAdapter = New SystemDataSqlClientSqlDataAdapter

dataAdapterSelectCommand = dbCommand

Dim dataSet As SystemDataDataSet = New SystemDataDataSet

dataAdapterFill(dataSet)

Return dataSet

End Function

</script>

<html><head runat=server><title>Untitled Page/title></head>

<body>

<form id=form runat=server><div>

<asp:BulletedList ID=BulletedList DataTextField= au_lname Runat=server />

</div></form>

</body></html>

  以上示例對數據庫執行了一條簡單的SQL SELECT語句並將結果與一個BulletedList控件綁定頁面中有一個名為GetAuthorsByState的方法該方法創建了用來完成這個任務的幾個ADONET對象

  · SqlConnection對象表示與數據庫服務器進行連接

  · SqlCommand對象表示要執行的SQL SELECT命令

  · SqlParameter對象代表了一個將被命令中的標記代替的值

  · SqlDataAdapter表示填充命令中的DataSet對象的能力

  · DataSet表示命令結果可以與BulletedList進行綁定

  在Page_Load事件中調用GetAuthorsByState方法並生成DateSet結果然後將這個結果賦給BulletedList的DataSource屬性接著調用DataBind()使得BulletedList用這個數據結果將自己同步我們在頁面執行生存期中的適當的時候調用DataBind()這樣的做法是ASPNET 在一般情況下尋找並消除的一個關鍵步驟實際上在大多數情況下 ASPNET 根本不需要與ADONET進行交互操作但是理解上述ADONET對象之間的關系是非常有用的這樣我們就可以討論 ASPNET 是如何改進這個模式的

  和數據訪問

  ASPNET 給我們提供了一個改良的數據訪問模式這個模式減少了在 ASPNET x中執行數據綁定所需的代碼量首先無需編程實現實例化設置屬性以及調用前述列表中的ADO對象的方法您需要做的就是在頁面上簡單地添加服務器端控件並設置屬性當呈現頁面時ASPNET 將會自動地執行所有的對象實例化並調用方法創建並顯示數據請將以下ASPNET 代碼與上面的代碼進行對比

<html>

<head runat=server><title>Demo</title></head>

<body>

<form id=form runat=server

<asp:SqlDataSource ID=SqlDataSource Runat=server SelectCommand=SELECT au_lname FROM authors WHERE (state = @state)

ConnectionString=Server=HPSERV; Integrated Security=True;Database=pubs

<SelectParameters>

<asp:Parameter Type=String DefaultValue=CA Name=state />

</SelectParameters>

</asp:SqlDataSource>

<asp:BulletedList ID=BulletedList runat=server DataSourceID=SqlDataSource

DataTextField=Au_lname

</asp:BulletedList>

</form>

</body></html>

  第二個改進來自於對在頁面生存期中的事件敏感的服務器端控件ASPNET 服務器端控件能夠在正確的時間做出正確的動作請注意在ASPNET 頁面中對頁面生存期中的事件的任何引用ASP早期版本的學生一般都會對在頁面生存期中執行多種任務感到迷惑特別是數據綁定因此很多ASPNET x頁面都會有這樣的讓程序員編寫代碼的遭遇即在錯誤的事件下調用DataBind或者在多個事件中多次調用DataBind這些定時操作現在都可以通過ASPNET 的服務器端數據控件來自動完成

  請注意在前面的ASPNET 的代碼中使用了兩個服務器端控件第一個是數據源控件本例中是SqlDataSource控件該控件在後台建立了所有顯示數據所需的ADO連接對象包括ConnectionCommand以及DataReader或者Dataset對象然後使用了一個名為BulletedList的數據綁定控件用來獲取數據源控件的數據並在頁面上呈現

  術語

  在完成介紹性內容之前我將提供一個到目前為止所用到的術語表

  · 動態Web頁—— 作為代碼存儲在Web服務器上的文件當被請求時可轉換為HTML當頁面被轉換時他們可以根據用戶和網站擁有者的實時情況而按照不同的請求來獲取不同的表單

  · IIS—— 在Windows中內置的Web服務器用於通過TCP/IP向請求者提供Web頁運行於Windows 或者Windows XP Professional上的IIS可以使用NET Framework類來提供ASPNET Web頁

  · NET Framework—— 一組包含Microsoft編寫的代碼的類可以使得開發應用程序更加方便和快捷並且更易於在互聯網上運行很多類都已經被封裝進能夠啟用NET 的大約十多個Microsoft產品當中了

  · CLR(公共語言運行庫)—— NET Framework的一項特性可以讓編程人員用多種語言編寫代碼然後將代碼編譯成可用來部署的單獨統一的語言

  · ASPNET—— NET Framework中的運行時和類庫集用來創建動態Web應用程序

  · 數據存儲—— 數據被存放和管理的地方所有的RDBMS都可用於數據存儲但是有些數據存儲就不是RDBMS因為它們不是關系型的

  · 數據庫或關系型數據庫管理系統(RDMS)—— 一種可以讀取和操縱數據的軟件大多數系統包含了用來設計和測試數據庫的工具以及優化過程的工具一個RDBMS必須按照標准化形式(關系型格式)存儲數據

  · DataBase模式(或數據庫元數據)—— 數據庫結構包括表和關系的設計該模式不包括實際的數據值

  · MicrosoftTM Access—— 一種基於MDB文件格式JET引擎以及一系列用於創建和使用數據庫的工具的RDMSAccess價格便宜容易學習能被廣泛接受並且已經被部署到很多機器上但是它不支持太多的並發用戶

  · JET—— 運行在後台並使用MDB(Access)文件的數據庫引擎JET可以直接從其他軟件(例如NET或Access)接受命令來讀取或者修改MDB文件

  · 結構化查詢語言(Structured Query LanguageSQL)—— 一種被數據使用者用來從數據提供程序那裡請求讀取或者寫入數據的語言經過近十年的發展SQL已經成為與RDBMS通信的標准

  · MicrosoftTM SQL Server—— 一種企業級的RDBMS可以支持大量的數據和大量的並發用戶

  · MicrosoftTM SQL Server Express(SSE)—— 基於Microsoft SQL Server數據庫引擎的可免費獲得的數據庫引擎與SQL Server不同的是SSE能提供的同時數據連接數量有限並且只有少數幾個功能本書將在大多數示例中使用SSE

  · MicrosoftTM Data Engine(MSDE)—— 與SSE類似但是基於SQL Server引擎的早期版本MSDE將在本書的練習中使用

  · XML—— 一種標准的數據格式每個值都被存儲並描述XML不是非常有效率(用於描述的空間通常會超過數據的大小)但是卻能被很多不同的數據管理系統方便地讀取

  · Web頁編輯器—— 一種允許打開和修改頁面的軟件最常用的編輯器是記事本Visual StudioVisual Web Developer和ASPNET Web Matrix與其他工具打包成一個編輯器用以提高效率 · 集成開發環境(Integrated Development EnvironmentIDE)—— 一套用來幫助編程人員開發代碼的工具Visual Studio就是一個非常強大的IDEWeb ASPNET Web Matrix也提供了很多工具典型的IDE應當包含一個Web頁編輯器

  · ADONET—— 由Microsoft編寫的類(代碼)的集合作為數據存儲(例如Access或者XML文件)和數據使用者(例如ASP頁面)之間的中間件

  · 連接—— 一個ADO對象表示數據使用者和數據提供程序之間的惟一路徑

  · 命令—— 一個ADO對象表示一條可以被傳遞給數據庫的SQL語句

  · 參數—— 一個ADO對象表示在語句進入數據庫之前可以被插入Common Object(SQL語句)中的多個數據

  · DataSet—— 一個ADO對象表示集成至記錄或字段中的一組數據

  · 服務器控件—— 一組獨立的代碼(一個對象)用於在服務器上執行任務生成兼容HTML的並且發送至浏覽器的頁面通過ViewState服務器端控件可以維持其狀態

  · 數據源控件—— 一種服務器端控件可以創建專門的惟一的數據庫連接它提供了ADO對象的一種抽象並且使得編寫ASPNET 頁面更加快速和容易數據源控件可用於Microsoft SQL ServerAccessXML以及其他數據源

  · 數據綁定控件—— 一種服務器端控件可以從數據源控件中獲得數據並在頁面上呈現它數據綁定控件將程序員從編寫諸如<table>的HTML標記中解脫出來數據綁定控件可用於呈現表格列表樹型以及其他結構


From:http://tw.wingwit.com/Article/program/net/201311/12506.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.