ASP.NET2.0資料操作之建立資料訪問層(2)

來源:互聯網
上載者:User
asp.net|建立|訪問|資料

  這最後一個複選框,“產生DB直接方法(GenerateDBDirectMethods)”,如果選了的話,會為TableAdapter自動生 成Insert(),Update(),和Delete()方法。如果你不選這個選項 的話,所有的更新都需要通過TableAdapter唯一的Update()方法來實現,該方法接受一個強型別的DataSet,或者一個DataTable,或者單個DataRow,或者一個DataRow數組。(假如你 在圖9所示的進階屬性裡把“產生添加,更新和刪除語句”的選項去掉的話,這個複選框是不起作用的)。讓我們 保留這個複選框的選項。


圖 11: 把方法名字從 GetData 改成 GetProducts

  按“完成”按鈕結束嚮導。在嚮導關閉後,我們回到DataSet設計器中,它會顯示我們剛建立的DataTable。你可 以看到Products DataTable的欄位列單(ProductID, ProductName 等),還有ProductsTableAdapter的Fill()和GetProducts()方法 。


圖 12: Products DataTable和ProductsTableAdapter被添加到強類 型DataSet中

  至此,我們產生了含有單一DataTable類(Northwind.Products)的強型別DataSet以及一個含 有GetProducts()方法的強類 型DataAdapter類(NorthwindTableAdapters.ProductsTableAdapter)。通過這些對象可以用下 列編碼來擷取所有產品的列單:


C#
1 2 3 4 5 6 7 
NorthwindTableAdapters.ProductsTableAdapter  productsAdapter = new  NorthwindTableAdapters.ProductsTableAdapter(); Northwind.ProductsDataTable products; products = productsAdapter.GetProducts(); foreach (Northwind.ProductsRow productRow in products)     Response.Write("Product: " +  productRow.ProductName + "<br />"); 


  這段編碼不要求我們寫一行的跟資料訪問有關的編碼。我們不需要產生任何ADO.NET類的執行個體,我們不需要 指明任何連接字串,任何SQL查詢語句,或者任何預存程序。TableAdapter為我們提供了底層的資料訪問編 碼!

  這個例子裡的每個對象都是強型別的,允許Visual Studio提供IntelliSense協助以及編譯時間類型檢查。最棒 的是,從TableAdapter 返回的DataTable可以直接綁定到ASP.NET資料Web 控制項上去,這樣的控制項包 括GridView,DetailsView,DropDownList,CheckBoxList,以及另外幾個控制項。下面這個例子示範只要 在Page_Load事件處理函數裡添加短短的三行編碼就能將從GetProducts()方法返 回的DataTable綁定到一個GridView上去。

  AllProducts.aspx

ASP.NET
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
<%@ Page Language="C#"  AutoEventWireup="true" CodeFile="AllProducts.aspx.cs"  Inherits="AllProducts" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">     <title>View All Products in a GridView</title>     <link href="Styles.css"  rel="stylesheet"  type="text/css"  /> </head> <body>     <form id="form1" runat="server">     <div>         <h1>             All Products</h1>         <p>             <asp:GridView ID="GridView1" runat="server"              CssClass="DataWebControlStyle">                <HeaderStyle CssClass="HeaderStyle" />                <AlternatingRowStyle CssClass="AlternatingRowStyle" />             </asp:GridView>              </p>     </div>     </form> </body> </html> 


  AllProducts.aspx.cs

C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using NorthwindTableAdapters; public partial class  AllProducts : System.Web.UI.Page {     protected void  Page_Load(object sender, EventArgs e)     {         ProductsTableAdapter productsAdapter = new          ProductsTableAdapter();         GridView1.DataSource = productsAdapter.GetProducts();         GridView1.DataBind();     } } 



圖 13: 顯示在GridView裡的產品列單

  這個例子要求我們在ASP.NET網頁的Page_Load事件處理函數裡,寫三行編碼。在以後的教程裡,我們將討 論使用ObjectDataSource,用聲明的方式來從DAL中擷取資料。用ObjectDataSource的話,我們一行編碼都不 用寫,而且還能得到分頁和排序支援呢!

  第三步:給資料訪問層添加參數化的方法

  至此,ProductsTableAdapter只有一個方法,GetProducts(),它返回資料庫裡的所有產品。能夠操作所有的產品當然有用,但很多時候我們想要擷取關於一個指定產品的資訊,或者屬於某個特 定分類的所有產品。要想給我們的資料訪問層添加這樣的功能,我們可以給TableAdapter添加參數化的方法。

  讓我們來添加一個GetProductsByCategoryID(categoryID)方法。為給DAL添加新的 方法,讓我們回到DataSet設計器,在ProductsTableAdapter上按右滑鼠,然後選擇“添加查 詢(Add Query)”。


圖 14: 在TableAdapter上按右滑鼠,選擇“添加查詢”

  嚮導首先會問我們是否要通過一個ad-hoc SQL語句還是產生一個新預存程序或者使用現有預存程序來訪問 資料庫。讓我們還是選擇使用SQL 陳述式。接著,嚮導會問我們使用什麼類型的SQL查詢。因為我們想返回屬於 指定分類的所有產品,我們需要寫一個返回資料行的SELECT語句。


圖 15: 選擇產生一個返回資料行的SELECT語句

  下一步是定義用於訪問資料的SQL查詢語句。因為我們只想返回屬於指定分類的那些產品,我重 用GetProducts()裡的SELECT語句,但添加了一個WHERE 子 句:WHERE CategoryID = @CategoryID。其中的@CategoryID參數 向TableAdapter設定精靈表示我們正在產生的方法將需要一個對應類(即,可為null-nullable的整數)的輸入 參數。


圖 16: 輸入一個只返回指定分類的產品的查詢

  在最後一步,我們可以選擇使用何種資料訪問模式,還可以定製產生的方法的名字。對應於Fill 模式,讓我們把名字改成FillByCategoryID,對返回DataTable模式的方法(GetX方法),讓我們來用GetProductsByCategoryID這個名字。


圖 17: 為TableAdapter的方法選擇名字

  在結束嚮導後,DataSet設計器包含了這些新的TableAdapter的方法。


圖18: 通過分類來查詢產品

  花點時間用同樣的手法添加一個GetProductByProductID(productID) 方法。

  這些參數化的查詢可以在DataSet設計器裡直接測試。在TableAdapter中的方法上按右滑鼠,然後選擇“預 覽資料(Preview Data)”。接著,輸入對應參數的值,然後按“預覽(Preview)”。


圖19: 屬於飲料(Beverages)類的那些產品列單

  通過我們的DAL中的GetProductsByCategoryID(categoryID)方法,我們就能設計一 個ASP.NET網頁來顯示屬於指定分類的那些產品。下面這個例子顯示了屬於Beverages(飲 料)類(CategoryID=1)的所有產品。

  Beverages.aspx

ASP.NET
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
<%@ Page Language="C#"  AutoEventWireup="true" CodeFile="Beverages.aspx.cs"  Inherits="Beverages" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">     <title>Untitled Page</title>     <link href="Styles.css"  rel="stylesheet"  type="text/css"  /> </head> <body>     <form id="form1" runat="server">     <div>         <h1>Beverages</h1>         <p>             <asp:GridView ID="GridView1" runat="server"              CssClass="DataWebControlStyle">                <HeaderStyle CssClass="HeaderStyle" />                <AlternatingRowStyle CssClass="AlternatingRowStyle" />             </asp:GridView>              </p>     </div>     </form> </body> </html> 


  Beverages.aspx.cs

C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using NorthwindTableAdapters; public partial class  Beverages : System.Web.UI.Page {     protected void  Page_Load(object sender, EventArgs e)     {         ProductsTableAdapter productsAdapter = new          ProductsTableAdapter();         GridView1.DataSource =           productsAdapter.GetProductsByCategoryID(1);         GridView1.DataBind();     } } 



圖 20: 屬於Beverages(飲料)類的所有產品顯示



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.