ASP.NET 2.0數(shù)據(jù)教程:給數(shù)據(jù)訪問層添加參數(shù)化的方法
第三步:給數(shù)據(jù)訪問層添加參數(shù)化的方法
至此,ProductsTableAdapter只有一個(gè)方法,GetProducts(),它返回?cái)?shù)據(jù)庫里的所有產(chǎn)品。能夠操作所有的產(chǎn)品當(dāng)然有用,但很多時(shí)候我們想要獲取關(guān)于一個(gè)指定產(chǎn)品的信息,或者屬于某個(gè)特定分類的所有產(chǎn)品。要想給我們的數(shù)據(jù)訪問層添加這樣的功能,我們可以給TableAdapter添加參數(shù)化的方法。
添加參數(shù)化:讓我們來添加一個(gè)GetProductsByCategoryID(categoryID)方法。為給DAL添加新的方法,讓我們回到DataSet設(shè)計(jì)器,在ProductsTableAdapter上按右鼠標(biāo),然后選擇“添加查詢(Add Query)”。
圖 14: 在TableAdapter上按右鼠標(biāo),選擇“添加查詢”
向?qū)紫葧?huì)問我們是否要通過一個(gè)ad-hoc SQL語句還是生成一個(gè)新存儲(chǔ)過程或者使用現(xiàn)有存儲(chǔ)過程來訪問數(shù)據(jù)庫。讓我們還是選擇使用SQL 語句。接著,向?qū)?huì)問我們使用什么類型的SQL查詢。因?yàn)槲覀兿敕祷貙儆谥付ǚ诸惖乃挟a(chǎn)品,我們需要寫一個(gè)返回?cái)?shù)據(jù)行的SELECT語句。
圖 15: 選擇生成一個(gè)返回?cái)?shù)據(jù)行的SELECT語句
添加參數(shù)化的下一步是定義用于訪問數(shù)據(jù)的SQL查詢語句。因?yàn)槲覀冎幌敕祷貙儆谥付ǚ诸惖哪切┊a(chǎn)品,我重 用GetProducts()里的SELECT語句,但添加了一個(gè)WHERE 子 句:WHERE CategoryID = @CategoryID。其中的@CategoryID參數(shù)向TableAdapter配置向?qū)П硎疚覀冋谏傻姆椒▽⑿枰粋€(gè)對(duì)應(yīng)類(即,可為null-nullable的整數(shù))的輸入?yún)?shù)。
圖 16: 輸入一個(gè)只返回指定分類的產(chǎn)品的查詢
在添加參數(shù)化的***一步,我們可以選擇使用何種數(shù)據(jù)訪問模式,還可以定制生成的方法的名字。對(duì)應(yīng)于Fill 模式,讓我們把名字改成FillByCategoryID,對(duì)返回DataTable模式的方法(GetX方法),讓我們來用GetProductsByCategoryID這個(gè)名字。
圖 17: 為TableAdapter的方法選擇名字
在結(jié)束向?qū)Ш?,DataSet設(shè)計(jì)器包含了這些新的TableAdapter的方法。
圖18: 通過分類來查詢產(chǎn)品
花點(diǎn)時(shí)間用同樣的手法添加一個(gè)GetProductByProductID(productID) 方法。
這些參數(shù)化的查詢可以在DataSet設(shè)計(jì)器里直接測試。在TableAdapter中的方法上按右鼠標(biāo),然后選擇“預(yù)覽數(shù)據(jù)(Preview Data)”。接著,輸入對(duì)應(yīng)參數(shù)的值,然后按“預(yù)覽(Preview)”。
圖19: 屬于飲料(Beverages)類的那些產(chǎn)品列單
通過我們的DAL中的GetProductsByCategoryID(categoryID)方法,我們就能設(shè)計(jì)一個(gè)asp.net網(wǎng)頁來顯示屬于指定分類的那些產(chǎn)品。下面這個(gè)例子顯示了屬于Beverages(飲料)類(CategoryID=1)的所有產(chǎn)品。
Beverages.aspx
asp.net
- < %@ 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 Pagetitle>
- < link href="Styles.css"
- rel="stylesheet"
- type="text/css"
- />
- < /head>
- < body>
- < form id="form1" runat="server">
- < div>
- < h1>Beveragesh1>
- < 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
- 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(飲料)類的所有產(chǎn)品顯示
【編輯推薦】