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

ASP.NET構建數據層學習筆記

2013-11-13 09:42:24  來源: .NET編程 

  ASPNET構建數據層適用於
Microsoft ASPNET
Microsoft Visual Web Developer Express Edition

  歡迎您閱讀ASPNET構建數據層該文章將為您從頭到尾展示創建一個應用程序的完整過程要構建的初學者工具包稱為 Media Share Library Starter KitMedia Share Library Starter Kit 使您能輕松創建允許注冊用戶展示媒體項目(例如電影 DVD音樂 CD書籍等等)集合的應用程序以便供其他注冊用戶借用用戶能夠一並浏覽使用該應用程序的組所擁有的項目庫並向項目的注冊所有者請求借用某些特定項目Media Share Library Starter Kit 的理念是您能夠使用其提供的框架快速組織為更多人所共享的庫集合

  無論您是否使用初學者工具包它本身就表明了在最新版本的 ASPNET 中 Microsoft ASPNET 所具備的更激動人心的附加功能這正是它的微妙所在初學者工具包利用了大量的母版頁新的代碼隱藏模型新的服務器控件等等本文重點介紹如何使用初學者工具包的一些激動人心的新的數據功能例如使用新的 Microsoft SQL Server Express Edition 文件以及新數據源控件來執行插入更新和刪除數據的操作這些功能將在 ASPNET 中提供

  讓我們開始自己動手構建初學者工具包的數據層吧首先來學習使用新的 SQL Server Express Edition 構建自己的數據存儲

  使用SQL Server Express

  Microsoft 的 SQL Server Express Edition 是一個新的數據庫產品它基於 Microsoft SQL Server 成熟版本所使用的技術SQL Server Express Edition 是 SQL Server 的一個剪裁版本只要使用它您就不必使用其他數據庫文件(例如 Microsoft Access mdb 文件)來構建 ASPNET 應用程序的數據層了

  過去許多 Web 開發人員和業余愛好者發現使用 Access 文件作為應用程序的數據存儲非常簡單這些文件不但易於安裝和實現而且易於和應用程序的其余文件一起從一個位置復制到另一個位置鑒於這個原因Microsoft 通過新的 mdf 文件擴展名提供了 SQL Server Express Edition 文件您能夠以處理上述 Access 文件的方式對它進行處理這些 mdf 文件可通過與 Visual Studio 集成的卓越功能輕松創建在 ASPNET 應用程序內使用起來很簡單通過 xcopy 將文件從一個位置復制到另一個位置也很容易就好像只是 ASPNET 應用程序中的另一些文件一樣通過它進行部署可以說是易如反掌

  不僅如此使用方面的便利還有很多新的 SQL Server Express 產品支持諸如 XMLVARCHAR(MAX) 等新的數據類型甚至支持用戶定義的數據類型

  首先我們來了解用於存儲用戶和角色信息的數據庫文件

  構建ASPNETDBMDF 文件

  本文介紹的初學者工具包是處理注冊用戶的因此您最想知道的可能就是初學者工具包存儲用戶和角色信息的位置在初次構建和運行應用程序時您會注意到Visual Studio 動態創建了存儲這些信息的數據庫文件

  按 F 鍵啟動並構建應用程序之後ASPNET 將動態創建所需的 ASPNETDBMDF 數據庫文件該文件用於為應用程序存儲用戶的登錄信息和角色信息

  在 App_Data 文件夾中除了 ASPNETDBMDF 文件還有 Librarymdf 文件我們將在後面簡要介紹此文件如果文件夾中沒有此文件需要按下 Visual Studio 解決方案資源管理器工具欄中的刷新按鈕使用 Visual Studio 的優點是可直接通過它對此文件以及其他 SQL Server Express 數據庫文件執行您所需的任何操作在解決方案資源管理器中雙擊 ASPNETDBMDF 文件在 Visual Studio Server Explorer 中打開該數據庫文件

  您不僅可以使用數據庫中包含的表還可以使用數據庫圖表視圖存儲過程函數同義詞類型和程序集該 ASPNETDBMDF 文件屏幕快照顯示使用用戶登錄信息和角色時所需的所有表以及與用戶關聯的配置文件信息

  我們將不修改該 ASPNETDBMDF 文件因為它是要運行的 ASPNET 引擎需要的一個文件可以在該數據庫文件中只添加所需的新表並僅從該數據庫文件處運行整個應用程序但是最佳做法是將您自定義的數據庫操作從默認的 ASPNETDBMDF 文件所執行的操作中分離出來那麼

  接下來我們將介紹如何創建 Librarymdf 數據庫文件媒體共享庫 (Media Share Library) 將使用該文件來存儲有關應用程序所保存項目的所有信息其中包括每個保存的項目是否處於借用狀態

  構建 Librarymdf 文件

  構建下一層媒體共享庫 (Media Share Library) 數據層的方法是構建一個簡單的數據庫文件用它來保存應用程序需要存儲的所有底層數據該數據庫中實際存儲的是什麼?嗯事實上用戶需要存儲自己的媒體庫(DVDCD書籍等)以及有關項目借用狀態的信息如果您看過第一篇介紹初學者工具包的 ASPNET Jumpstart 文章就不難理解這個問題了

  要創建所需的數據庫文件在 Visual Studio 解決方案資源管理器中右鍵單擊 App_Data 文件夾在提供的菜單中選擇 Add New Item此操作將啟動添加新項目對話框選擇該對話框中的 SQL 數據庫作為創建應用程序所使用的文件類型請確保將該文件命名為 Librarymdf

  一旦創建該文件App_Data 文件夾中即出現新的 Librarymdf 文件雙擊該文件可在 Visual Studio Server Explorer 中打開它這一點與 ASPNETDBMDF 文件一樣


如果嘗試展開服務器資源管理器中的 Tables 文件夾那麼除了文件夾左側的加號圖標不見以外沒有其他反應這是由於當前 Librarymdf 文件中沒有任何表

  要創建第一張表只需右鍵單擊服務器資源管理器中 Librarymdf 下的 Tables 文件夾並在提供的菜單中選擇 Add New Table 即可您需要為本文的應用程序創建兩張表第一張表命名為 MediaTypes它將處理媒體共享庫 (Media Share Library) 應用程序所使用的自定義類別請記住庫中存儲的每個項目都需要以某種方式進行分類(例如 DVDCD書籍等)而且這些類別是根據 MediaTypes 表的內容動態生成的MediaTypes 表是要創建的一張簡單的表

  創建表時只要提供有關列的一些簡要信息即可創建這些數據庫的列

  在創建數據庫中的信息表時通常情況下比較合適的做法是用唯一的關鍵字標識表中的每一行因此MediaTypes 表將包含一個標題為 MediaTypeId 的列因為要為每行定義一個絕對唯一的 ID 值所以該列類型為 int而且不允許 Null但是這不適用於列定義下一步右鍵單擊某行開頭的灰色框選擇所提供菜單中的 Set Primary Key然後該行開頭會出現一個黃色的關鍵字除此之外請確保創建的每個 ID 都用作標識符並且每個 ID 都是唯一的高亮顯示某列您將能夠看到文檔窗口中定義的列屬性在此屬性窗格中設置標識說明 (Identity Specification)以便表明 ID 唯一且用於標識

  設置 MediaTypeId 列後下一步是創建該表中的其他兩列MediaTypeName (nvarchar()) 和 MediaComments (nvarchar(MAX))浏覽該表時不費吹灰之力就能辨別每列在本應用程序中的用途如前所述MediaTypeId 用作該表每行的標識符MediaType 是應用程序實際呈現給最終用戶的類別名而且實際上應用程序根本不使用 MediaComments它只是允許開發人員或數據庫管理員按需為每個類別提供注釋

  一旦表就緒請按 CTRL+S 來保存表定義然後會出現一個對話框提示您為新表命名

  請確保將該表命名為 MediaTypes

  創建 MediaTypes 表後再創建下一張表該表用於存儲應用程序中保存的所有庫項目該表也指示這些項目是否為某人所借用借用人是誰以及何時歸還給所有者

  從該表定義中您會發現某些數據項來源於應用程序所使用的其他表或數據庫例如UserName 列存儲的注冊用戶的用戶名該值最初是通過 ASPNET 成員關系系統從 ASPNETDBMDF 文件獲取的此外MediaType 列只是存儲了一個數字該數字與前面創建的 MediaTypes 表所使用的某個唯一 ID 相關

  既然這兩張表已經准備就緒下面我們來介紹應用程序如何從這些表中提取並存儲數據下面繼續介紹ASPNET構建數據層

  使用新的數據源服務器控件提取和發送數據

  通過 NET 提取數據庫數據(或將數據發回數據庫)有若干種方法因此必須找出一種最適合您的應用程序和實際情況的數據檢索方案ASPNET 通過引入一系列全新的數據源服務器控件使這一過程變得十分簡單

  新的 ASPNET 數據源控件提供一種聲明方法通過它可連接到數據存儲並檢索應用程序所需的數據使用新數據源控件的步驟比以往使用 ASPNET x 所采用的步驟更簡單

  您可以任意使用 個新數據源服務器控件一些新的數據源控件是專門為使用 Microsoft SQL Server新的 Microsoft SQL Server Express Edition 數據庫文件XML 文件等而設計的這些數據源控件可以連接到指派的數據存儲檢索數據並執行通過各種服務器控件屬性指定的任何數據操作

  使用 SqlDataSource 控件選擇數據

  仔細觀察 Media Share Library Starter Kit 代碼會發現其中多次使用了數據源控件以選擇插入更新或刪除 Librarymdf 數據庫文件中存儲的信息我們首先來看一些簡單的 Select 示例

  MainLibraryaspx 頁(位於媒體共享庫 (Media Share Library) 應用程序的 Library 文件夾中)上有一個簡單數據檢索的典型示例該頁含有一個 GridView 服務器控件該控件顯示輸入到庫中的某一特定類別的所有項目最終用戶通過一個下拉列表控件完成類別選擇該控件位於顯示結果的 GridView 控件的正上方那麼類別數據又是如何填充到下拉列表控件的?其實這是通過使用一個 SqlDataSource 控件完成的該控件從上文創建的 MediaTypes 表中提取類別列表一旦獲得類別列表就將其傳遞給下拉列表控件首先SqlDataSource 控件從 Librarymdf 數據庫文件中提取類別列表

  這是一個相當簡單的 SqlDataSource 控件示例與 ASPNET 中的其他服務器控件一樣控件內必須首先設置一個 ID 值和 runat=server下一個要注意的重要項目是 ConnectionString 屬性該屬性通過 <%$ ConnectionStrings:LibraryConnectionString %> 值指向 nfig 文件中的一個位置但是該值的含義沒有直接點明其真正表示的意思是使用的值需要從 nfig 文件的 <ConnectionStrings> 部分提取即使用名為 LibraryConnectionString 的特定 <add> 節點內的值

  創建 SqlDataSource 控件的 ConnectionString 屬性後還需要留意 SelectCommand 屬性該屬性接收 Select TSQL 命令這些命令用於提取 Librarymdf 數據庫文件中特定表的數據以本文為例提取 MediaTypes 表的 MediaTypeName 和 MediaTypeId 列按字母順序進行排列後再傳遞給本頁的下拉列表控件

  將選定的數據綁定到服務器控件

  設置好 ConnectionStringSelectCommand 屬性後即可將 SqlDataSource 控件綁定到頁面上的一個或多個控件然而本文示例只是將 SqlDataSource 控件綁定到 DropDownList 這一個控件

  下拉列表通過使用 DataSourceID 屬性將自身綁定到 SqlDataSource 控件的輸出所有數據綁定服務器控件均可使用該屬性提供給 DataSourceID 屬性的值就是 SqlDataSource 控件(本示例的 SqlDataSource)中使用的 ID下拉列表在該處有特殊的可用性需求 — 在文本字段和可選值字段中放置一個值

  我們將分別使用 MediaTypeIdMediaTypeName 的值作為 <option> 的值和顯示給最終用戶的值DropDownList 服務器控件的使用是通過 DataTextFieldDataValueField 屬性的使用來完成的

  由於 DropDownList 現在綁定到 SqlDataSource 控件的輸出因此頁面將動態地提取輸出結果

  選擇帶有參數的數據

  有時您必須選擇基於某一特定參數的數據即所謂的參數化查詢例如想要一份客戶數據庫中所有加拿大客戶的列表這即是一個參數化查詢您不想要所有客戶的列表這樣的列表繁雜冗長如果將某個值(本示例為 Canada)傳遞給 Select 語句將返回一個經過篩選的結果集

  Media Share Library Starter Kit 中的 MainLibraryaspx 頁上還有一個 GridView 控件該控件由另一個 SqlDataSource 控件 (SqlDataSource) 驅動後者需要參數化查詢來獲取結果本示例的 GridView 實際上由最終用戶通過選擇下拉列表控件(上文圖 所示)的項目來控制如果最終用戶選擇下拉列表中的 DVD那麼在 Select 語句中將使用該值GridView 控件只顯示返回的 DVD 類別的庫項目當然GridView 中顯示的數據完全由 SqlDataSource 控件控制

  觀察該 SqlDataSource 控件會發現它與我們在上文看到的 SqlDataSource 控件之間有很多相似之處盡管有相似之處但是也有一些顯著的差別最明顯的一點是 SelectCommand 值要長得多造成該結果的一個原因是要檢索 Media 表中的大量列值另一個更有趣的原因源於命令中的 WHERE 語句

  WHERE ([MediaType] = @MediaType) ORDER BY [MediaName]

  這行代碼表示的真正含義是SqlDataSource 控件要選擇 Media 表中 MediaType 列值等於某個特定參數的所有已定義列我們稍後將用 @MediaType 定義該參數獲得這些值後需要根據 MediaName 列的值按字母順序排序

  以聲明方式定義參數

  依據上文來看稍後為 @MediaType 變量賦值很重要賦值的方法有兩種 — 聲明方式或編程方式

  首先回顧如何以聲明方式定義參數

  我們可以使用 SqlDataSource 控件的 <SelectParameters> 部分為 @MediaType 變量賦值因為 Select 語句中至少有一個參數需要定義(請參看上文列表 中的示例)除 <SelectParameters> 部分之外SqlDataSource 控件還有 <DeleteParameters><FilterParameters><InsertParameters> 和 <UpdateParameters>下列控件可以在 <SelectParameters> 部分內嵌套使用

  

  <asp:Parameter>

  基本的參數占位符可稍後定義

  <asp:ControlParameter>

  在獲取頁面上另一個服務器控件的值時使用

  <asp:CookieParameter>

  在需要獲取最終用戶的 cookie 鍵值時使用

  <asp:FormParameter>

  在接收來自窗體集合的值時使用

  <asp:ProfileParameter>

  在接收來自 Profile 對象的值時使用該對象與提交請求的最終用戶相關聯

  <asp:QueryStringParameter>

  在接收請求的 URL 查詢字符串的鍵值時使用

  <asp:SessionParameter>

  在接收最終用戶會話對象的鍵值時使用


  我們通過使用 <asp:ControlParameter> 控件將列表 示例中的 @MediaType 值與 DropDownList 服務器控件中的值關聯起來

  要從頁面上的 DropDownList 控件獲取 @MediaType 所使用的值ControlParameter 控件需要通過屬性 ControlID 將兩者關聯起來提供給 ControlID 屬性的值必須為關聯控件的 ID 屬性值後面的屬性 Name 指向參數化查詢中的真正變量名這一點很重要因為需要定義的 Select 參數可能不止一個雖然本示例僅有一個參數但是這種關聯仍然是必要的因為我們使用的是一個下拉列表所以需要定義 SqlDataSource 控件要使用下拉列表的哪一個屬性例如在關聯一個下拉列表控件時可以獲得諸如 SelectedIndexSelectedItemSelectedValue 屬性的值因此需要聲明要獲取的屬性SqlDataSource 控件中定義的最後一個屬性是 Type 屬性就是在這裡對控件的值進行真正意義上的類型轉換(本示例轉換為 Int

  上述定義完成後您就可以使用下拉列表控件來驅動 SqlDataSource 控件並使用通過它提取的 Librarymdf 數據庫文件中 Media 表的值了

  以編程方式定義參數

  除了聲明方式之外還有另一種選擇下面介紹以編程方式定義參數如上文所示與直接在 SqlDataSource 控件中使用不同這種方式在代碼隱藏頁面中使用

  觀察 Defaultaspx 頁它位於 Media Share Library Starter Kit 的 Library 文件夾該頁會在您所有的或借用的項目上顯示警告這些警告還會提供給參數化 select 查詢過程所使用的 SqlDataSource 控件Select 命令如下所示

  SELECT [UserName] [MediaName] [MediaISBN] [DueDate] FROM [Media]

  WHERE (([DueDate] < @DueDate) AND ([Borrower] = @Borrower) AND ([OnLoan] = @OnLoan)) ORDER BY [DueDate]

  在完成這個 Select 命令之前必須為三個變量賦值 — @DueDate@Borrower@OnLoan如果查看 Defaultaspx 頁中的 SqlDataSource 控件聲明您會發現這三個變量之中只有兩個在 Select 命令中賦了值

  上面定義的聲明參數列表只聲明了 @Borrower@OnLoan 參數列表中沒有 @DueDate 參數這是因為該參數值會隨服務器當前日期/時間的變化而動態改變這也是該參數需要以聲明方式定義的原因

  


    SqlDataSourceSelectParametersAdd(DueDate   
    TypeCodeDateTime DateTimeNowToString()) 

  在該行代碼中SqlDataSource 控件通過 Add() 方法添加一個 SelectParameter

  Add() 方法要求提供變量名類型和值即本例中的 DueDate對於該變量的值我們只需提供服務器當前日期/時間即可

  到此為止SqlDataSource 控件已經具備 Select 命令需要的所有三個參數

  盡管本文說明的是 Select 命令的使用但是不要忘了您還可以將此類功能用於 DeleteInsert 和 Update 命令

  小結

  本文為您介紹了ASPNET構建數據層首先我們介紹了在 SQL Server Express Edition 中如何直接構建一個新的數據庫和表然後介紹了 ASPNET 數據源控件以及如何使用這些控件從創建的數據文件中提取所需的數據ASPNET Jumpstart將介紹如何使用 ASPNET 提供的一些激動人心的新控件希望您能享受其中的樂趣並祝您編程愉快!


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