رای ایجاد DAL یک TypedDataSet به پروژه اضافه میکنیم. برای انجام این کار روی نام پروژه کلیک راست کرده و Add New Item را انتخاب کنید. از لیست قالبها DataSet را انتخاب کرده و آن را Northwind.xsd بنامید.
هنگام کلیک دکمه Add کادر محاورهای باز میشود با این پیام که میخواهد DataSet را درون پوشه App_Data قرار دهد. با زدن دکمه Yes آن را تایید کنید. پس از آن، صفحه طراحی DataSet نمایش داده شده و مراحل پیکربندی TableAdapter شروع میشود. این مراحل به شما کمک میکند که اولین TableAdapter را به Typed DataSet اضافه کنید. در این آموزش برای هر کدام از جدولهای پایگاه داده یک strongly-typed DataTable ایجاد میکنیم.
در نظر داشته باشید که strongly-typed DataTable شامل هیچگونه اطلاعاتی که نشان دهنده چگونگی دسترسی به جدول مورد نظر در پایگاه داده باشند، نیستند. برای بازیابی اطلاعات جهت DataTable از کلاس TableAdapter استفاده میکنیم. برای Products DataTable، متدهای GetProducts() و GetProductByCategoryID(categoryID) درون TableAdapter قرار دارند که توسط لایه نمایش فراخوانی میشوند. مراحل پیکربندی TableAdapter با تلاش برای مشخص کردن پایگاه داده شروع میشود. از لیست آبشاری میتوانید پایگاههایی که در Server Explorer هستند را مشاهده و انتخاب کنید. اگر Northwind به Server Explorer اضافه نشده است، میتوانید با کلیک روی New Connection یک اتصال جدید برقرار کنید.
پس از انتخاب پایگاه داده و رفتن به مرحله بعدی از شما در مورد ذخیره Connection String در فایل Web.config پرسیده میشود.
پس از آن باید طرحی را برای strongly-typed DataTable مشخص کنیم و اولین متد را برای TableAdapter جهت استفاده در DataSet تهیه نماییم. این دو مرحله به طور همزمان با ایجاد یک کوئری که فیلدهای جدولی که میخواهیم در DataTable انعکاس پیدا کند را برمیگرداند، انجام میشود. در پایان مراحل یک نام برای کوئری انتخاب میکنیم. پس از پایان مراحل، میتوان این متد را در لایه نمایش فراخوانی کرد. در مرحله بعدی نوع دسترسی TableAdapter به پایگاه داده را باید مشخص کنیم.
در این مرحله میتوانیم کوئری SQL را بنویسیم. کدهای مشخص شده زیر تمام اطلاعات جدول Products را برمیگرداند.
به جای آن میتوان از Query Builder استفاده کرد.
پس از ایجاد کوئری، قبل از رفتن به مرحله بعد، بر روی Advanced Options کلیک کنید. در پروژههای وب سایت، گزینه Generate Insert, Update, and Delete statements به طور پیش فرض انتخاب شده است؛ در پروژههای ویندوزی گزینه Use optimistic concurrency نیز انتخاب شده است که اگر چنین است، آن را از انتخاب درآورید.
پس از آن به مرحله آخر رفته و در مورد چگونگی اضافه کردن متد به TableAdapter پرسیده میشود:
· Fill a DataTable: با این گزینه یک متد ایجاد میشود که در یک DataTable به عنوان یک پارامتر نگهداری میشود.
· Return a DataTable: با این گزینه متد ایجاد میشود و DataTable به عنوان متد برگردانده میشود.
میتوان در یک TableAdapter هر دو گزینه را انتخاب کرد. همچنین میتوان نام متدها را تغییر داد. در حال حاضر هر دو گزینه را انتخاب کرده و نام GetData را به GetProducts تغییر دهید.
اگر گزینه آخر؛ GenerateDBDirectMethods؛ را انتخاب کنید متدهای Insert(), Update() و Delete() برای TableAdapter ایجاد میشوند. اگر این گزینه انتخاب نشود تمام بروزرسانیها باید تنها از طریق متد Update() مربوط به TableAdapter که در Typed DataSet قرار دارد انجام شود (اگر در مراحل قبلی گزینه Generate Insert, Update, and Delete statements را انتخاب نکرده باشید، این گزینه غیر فعال است). این گزینه را انتخاب کنید.
مراحل را با کلید دکمه Finish به پایان برسانید. بعد از بسته شدن مراحل پیکربندی به صفحه طراحی DataSet برمیگردیم که در آن DataTable که ایجاد کردیم وجود دارد. شما میتوانید تمام فیلدها را در Products DataTable مشاهده کنید و همچنین متدهای ProductsTableAdapter(fill() and GetProducts()) نیز قابل مشاهده هستند.
در حال حاضر یک Typed DataSet به همراه یک DataTable (Northwind.Products) و یک کلاس strongly-typed DataAdapter (NorthwindTableAdapters.ProductsTableAdapter) همراه با متد GetProducts() داریم.
این متدها میتوانند مانند کدهای زیر برای دسترسی به لیست تمام محصولات استفاده شوند:
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 نیست، نیازی به ارجاع به هیچ رشته اتصالی نیست. در عوض TableAdapter کدهای سطح پایین برای دسترسی به داده را برای ما ایجاد میکند.
کدهای زیر نشان میدهند که چگونه DataTable توسط متد GetProducts() پر و در یک GridView نمایش داده میشود:
AllProducts.aspx
<%@ 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/xhtml1transitional.
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
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();
}
}
یکی از گزینهها هنگام کار با داده، درج کردن مشخصات منطقی داده داخل لایه نمایش است (داخل برنامه وب، ASP.NET لایه نمایش را ایجاد میکند). ممکن است این کار با نوشتن کدهای ADO.NET به عنوان قسمتی از کد صفحه ASP.NET و یا با استفاده از کنترل SqlDataSource داخل صفحه ASP.NET انجام شود. به عبارت دیگر، دو روش برای ارتباط لایه دسترسی داده (DAL) با لایه نمایش وجود دارد.
تمام کدهایی که برای کار با منبع داده مورد نیاز است؛ مانند ایجاد یک اتصال به پایگاه داده، صدور دستورات Select, Insert, Update, Delete و غیره، میتوانند در DAL نوشته شوند. لایه نمایش نباید شامل هیچ مرجعی برای دسترسی به داده باشد، اما در عوض باید شامل کدهایی برای فراخوانی DAL جهت پاسخگویی به درخواستهای دادهای باشد. لایههای دسترسی به داده به طور معمول، شامل متدهایی جهت دسترسی به پایگاه داده هستند. برای مثال، پایگاه داده Northwind شامل جدولهای Products و Categories میباشد که برای کار با آنها به متدهای زیر نیاز داریم:
· GetCategories(): که تمام اطلاعات در مورد گروهها را برمیگرداند.
· GrtProducts(): که تمام اطلاعات در مورد محصولات را برمیگرداند.
· GetProductsByCategoryID(categoryID): که تمام محصولات مربوط به گروه مشخص شده را برمیگرداند.
· GetProductByProductID(productID): که اطلاعات مربوط به یک محصول خاص را برمیگرداند.
وقتی متدها فراخوانی میشوند به پایگاه داده متصل شده، کوئری مناسب را میسازند و نتایج را برمیگردانند.
اینکه چگونه ما این نتایج را برگردانیم، مهم است. این متدها میتوانند به راحتی یک DataSet و یا یک DataReader که از کوئری تشکیل شده است را برگردانند، اما نکته مهم این است که نتایج با استفاده از اشیاء نوع قوی (strongly-typed objects) برگردانده شوند. طرح یک شیء نوع قوی دقیقا هنگام کامپایل کردن ایجاد میشود.
ممکن است شما به پایگاه داده Northwind که در SQL Server نصب شده متصل شوید. اگر در سرور، Northwind نصب نباشد، ابتدا باید آن را نصب کنید.
وقتی پایگاه داده نصب شد به Server Explorer رفته و روی گره Data Connections کلیک راست کرده و Add Connection را انتخاب کنید. اگر Server Explorer مشاهده نمیشود از مسیر View/Server Explorer و یا کلیدهای ترکیبی Ctrl+Alt+S قابل مشاهده میشود. کادر محاورهای Add Connection باز میشود، سروری که میخواهید به آن وصل شوید، اطلاعات اعتبارسنجی و نام پایگاه داده را مشخص کنید. وقتی اطلاعات اتصال را به طور صحیح پیکربندی کنید و کلید OK را بفشارید، پایگاه داده به صورت یک گره نزدیک گره Data Connections اضافه میشود. میتوانید با باز کردن گره پایگاه داده جدولها، نماها، رویههای ذخیره شده و غیره را مشاهده کنید.