در این زمان کلاس ProductsTableAdapter دارای یک متد است، GetProducts()، که تمام محصولات موجود در پایگاه داده را برمیگرداند. تا زمانی که بخواهیم با تمام محصولات کار کنیم این متد مناسب است، اما گاهی مواقع نیاز است که اطلاعات مربوط به یک محصول خاص را بازیابی کنیم، و یا تمام محصولاتی که در یک گروه قرار دارند را میخواهیم. برای اضافه کردن چنین توابعی به لایه دسترسی داده، میتوانیم متدهای دارای پارامتر به TableAdapter اضافه کنیم.
بدین منظور متد GetProductsByCategoryID(categoryID) را اضافه میکنیم. برای اضافه کردن متد جدید به DAL به محیط طراحی DataSet رفته و با کلیک راست در ProductsTableAdapter گزینه Add Query را انتخاب میکنیم.
در قدم اول باید مشخص کنیم که یک دستور SQL ایجاد میکنیم و یا از یک رویه ذخیره شده استفاده میکنیم. با انتخاب ایجاد یک دستور SQL؛ ad-hoc SQL statement؛ به مرحله بعد میرویم. در این مرحله پرسش میشود که چه نوع پرس و جوی SQL میخواهیم استفاده کنیم. از آنجایی که میخواهیم کلیه محصولاتی که در یک گروه قرار دارند را برگردانیم، از گزینه select که چندین سطر برمیگرداند، استفاده میکنیم.
قدم بعدی تعیین SQL Query برای دسترسی به دادهها است. از آنجایی که ما میخواهیم تمام محصولات مربوط به یک گروه خاص را برگردانیم، از دستوری مشابه GetProducts() استفاده میکنیم، اما شرط زیر را به آن اضافه میکنیم: where categoryID=@categpryID.
در مرحله آخر میتوانیم الگوی مورد استفاده برای دسترسی به داده را مشخص کنیم، مانند تعیین نام متدی که ایجاد شده است. نام الگوی Fill را به FillByCategoryID و الگوی برگرداندن DataTable را به GetProductsByCategoryID تغییر میدهیم.
بعد از پایان مراحل، محیط طراحی DataSet شامل یک متد جدید برای TableAdapter است.
متدهای دارای پارامتر را میتوان در محیط طراحی DataSet تست کرد. در TableAdapter بر روی متد راست کلیک کرده و Preview Data را انتخاب کنید. سپس مقدار پارامتر را وارد کرده و کلید Preview را کلیک کنید.
به وسیله GetProductsByCategoryID (categoryID) در DAL میتوانیم در یک صفحه ASP.NET محصولاتی که در یک گروه هستند را نمایش دهیم. نمونه کد زیر تمام محصولات گروه Beverages که دارای categoryID برابر 1 هستند را نشان میدهد:
Beverages.aspx
<%@ 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/xhtml1transitional.
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
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();
}
}