HOW 2 LEARN ASP.NET
نویسنده : delshad
تاریخ  : ۱۳۸۹/۳/۱
امتیاز :
بازدید : 2039
موضوع : برنامه نویسی چند لایه قسمت دوم : لایه ارتباط با پایگاه داده (Data Access Layer یا DAL)
توضیحات : معاری سه لایه 3-tier در Asp.NET قسمت دوم ، ارتباط با دیتابیس DAL
     

برنامه نویسی چند لایه قسمت دوم : لایه ارتباط با پایگاه داده (Data Access Layer یا DAL) :

در قست اول مقاله (مقدمه برنامه نویسی چند لایه) در مورد لایه بندی پروژه و مزایای استفاده از معماری چند لایه صحبت شد ، در این مقاله تئوری های گفته شده را عملی خواهیم کرد .

برای شروع برای اینکه یک پروژه تمیز داشته باشیم قدم به قدم به صورت زیر عمل نمایید :

  1. نرم افزار ویژوال استودیو را باز نمایید ، وارد منوی File و سپس New Project شوید
  2. از لیست سمت چپ (Project Types) گزینه Other Project Types و سپس Visual Studio Solution را برگزینید
  3. از لیست سمت راست (Templates) گزینه Blank Solution را انتخاب نمایید
  4. یک نام برای Solution خود در قسمت Name وارد نمایید
  5. مسیر Location را به دایرکتوری مجازی خود تغییر دهید (مثلا C:\Intepub\wwwroot ) و تایید نمایید

اکنون شما یک Solution خالی در مسیر دایرکتوری مجازی IIS ایجاد کرده اید ، ما در این پروژه خالی لایه ها را ایجاد خواهیم کرد ، هر یک از لایه ها به صورت یک پروژه جداگانه از نوع  Class Library خواهند بود .

برای ایجاد یک لایه جدید  به صورت زیر عمل نمایید :

  1. وارد منوی File > Add > Add New Project شده
  2. از سمت چپ زبان مورد نظر خودتان را انتخاب نمایید (Visual C Sharp یا Visual Basic)
  3. از سمت راست گزیته Class Library را انتخاب نمایید
  4. در فیلد Name نام لایه را تایپ نموده  (در اینجا نام DAL را برای لایه ارتباط با دیتابیس وارد می کنید) و تایید نمایید

برای اضافه نمودن لایه Bussiness Logic هم دقیقا روال فوق را طی کرده و نام BLL را وارد می نماییم .

برای ایجاد لایه User Interface یا UI به دلیل اینکه وب سایت ما را تشکیل می دهد بایک یک پروژه از نوع WebSite اضافه نماییم ، بنابراین وارد منوی File>Add >Add New Website شده ، مسیر Location را بر اساس پروژه ایجاد شده وارد نمایید (مثلا http://localhost/3-tier ) این کار باعث می شود که هم دایرکتوری مجازی ایجاد شود و هم اینکه لایه مورد نظر داخل پروژه قرار گیرد .

اگر از IIS استفاده نمی کنید کافیست مسیر را به صورت فیزیکی ست نمایید : C:\Inetpub\wwwroot\3-tier

تا اینجای کار ما 3 لایه ای که مد نظرمان بود را اضافه کردیم ، اکنون به سراغ لایه DAL می رویم .

به صورت پیشفرض یک کلاس به نام Class1 داخل این پروژه وجود دارد ، آن را حذف نمایید .

همانطور که در مقاله قبلی توضیح دادم این لایه تمام عملیات مربوط به بانک اطلاعاتی را انجام می دهد ، معمولا ما برای هر جدول از دیتابیس یک کلاس در این لایه ایجاد می کنیم ، اگر جدول های شما ارتباط تنگانگی باهم دارند میتوانید برای یک مجموعه از جداول یک کلاس در نظر بگیرید .

به عنوان مثال اگر یک جدول برای ذخیره نام کشور ها و یک جدول برای نام شهر ها دارید میتوانید آن ها را در یک کلاس قرار دهید ولی اگر یک جدول برای ذخیره کاربران و یک جدول برای مقالاتی که کاربران ارسال کرده اند دارید هر یک از این جداول را با یک کلاس Map می کنیم .

قبل از اینکه به سراغ ساخت کلاس ها برویم ، یک کلاس مادر ایجاد می کنیم که برخی از متدها و خواص عمومی را برای ما انجام می دهد ، بنابراین در لایه DAL گزینه Add New Item را از منوی Project انتخاب کرده و یک Class با نام  DALBase.cs اضافه نمایید :

اگر کلاس شما از نوع Public نبود کلمه Public را به قبل نام class اضافه نمایید :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    public class DALBase
    {

    }
}

 این کلاس میتواند شامل رشته اتصال و همچنین مجموعه ای از توابع و متدها برای کار با بانک اطلاعاتی باشد (به عنوان مثال متد ExecuteNoneQuery را در کلاس زیر پیاده سازی کرده ایم ، بقیه متد ها در فایل ضمیمه موجود می باشد) :

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace DAL
{
    public class DALBase
    {

        public string ConnectionString
        {
            get
            {
                return "Data Source=.;Initial Catalog=Db;Integrated Security=True";
            }
        }

        public int ExecuteNoneQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
        {
            using (SqlConnection con = new SqlConnection(ConnectionString))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = commandType;
                cmd.CommandText = commandText;
                cmd.Parameters.AddRange(commandParameters);
                con.Open();

                int retVal = cmd.ExecuteNonQuery();

                con.Close();

                return retVal;

            }
        }

      
    }
}

همچنین میتوانید رشته اتصال را از App.Config هم فراخوانی نمایید (در فایل ضمیمه این کار در App.Config انجام شده است) .

البته شما میتوانید از Microsoft Application Block یا Microsoft Enterprise Library برای این کار استفاده کنید .

برای استفاده از این کتابخانه ها ابتدا این کتابخانه را از اینجا دانلود کرده و سپس توسط Add Refrence به پروژه اضافه کنید ، و به جای متدهایی که خودتان می نویسید از این کتابخانه استفاده نمایید .

برای شروع کار یک دیتابیس ایجاد کرده و جدولی برای ذخیره اطلاعات کاربران در آن قرار دهید :

TBLUsers :

  • UserID : int
  • FirstName : nvarchar 50
  • LastName : nvarchar 50
  • EmailAddress : nvarchar 50
  • Username : nvarchar 20
  • Password : nvarchar 10
  • UserStatus : tinyint

اکنون میخواهیم کلاس مربوط به این جدول را در لایه DAL ایجاد کنیم ، بدین منظور در پروژه مربوط به لایه DAL وارد Add new item شده و یک آیتم از نوع Class با نام Users.cs اضافه نمایید ، کلاسی شبیه کلاس زیر ایجاد خواهد شد :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAL
{
    class Users
    {

    }
}

قبل از هر چیز این کلاس را Public نموده و سپس از کلاس مادر ارث بری می کنیم  :

   public class Users : DALBase
    {


    }

اکنون متد های مورد نیاز را ایجاد می کنیم ، به عنوان مثال متد Insert :

 

        public int AddNewUser(string firstName, string lastName, string emailAddress, string username, string password, byte userStatus)
        {

            return ExecuteNoneQuery(System.Data.CommandType.StoredProcedure, "AddNewUser", new SqlParameter[] { 
                
              new SqlParameter("@firstName", firstName),
              new SqlParameter("@lastName", lastName),
              new SqlParameter("@emailAddress",emailAddress),
              new SqlParameter("@password",password),
              new SqlParameter("@userStatus",userStatus),

            });
        }

و متدی برای دریافت اطلاعات :

        public SqlDataReader GetUserByUserID(int userId)
        {
            return ExecuteReader(System.Data.CommandType.StoredProcedure, "GetUserByUserID", new SqlParameter[] { 
                
              new SqlParameter("@userId", userId),

            });
        }

و متدهای دیگری که باید پیاده سازی شود (مانند حذف و به روز رسانی و ....)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
namespace DAL
{
    public class Users : DALBase
    {

        public int AddNewUser(string firstName, string lastName, string emailAddress, string username, string password, byte userStatus)
        {

            return ExecuteNoneQuery(System.Data.CommandType.StoredProcedure, "AddNewUser", new SqlParameter[] { 
                
              new SqlParameter("@firstName", firstName),
              new SqlParameter("@lastName", lastName),
              new SqlParameter("@emailAddress",emailAddress),
              new SqlParameter("@password",password),
              new SqlParameter("@userStatus",userStatus),

            });
        }

        public SqlDataReader GetUserByUserID(int userId)
        {
            return ExecuteReader(System.Data.CommandType.StoredProcedure, "GetUserByUserID", new SqlParameter[] { 
                
              new SqlParameter("@userId", userId),

            });
        }
    }

}

 

در مقاله بعدی از این لایه در ایجاد لایه BLL استفاده خواهیم کرد .

فایل ضمیمه را از اینجا دانلود نمایید


 

 

 
امتیاز بدهید :

نویسنده : سحر lindi555@yhoo.com ۱۳۸۹ چهارم شهريور
سلام لطفا pdf کامل پیادی سازی معماری چند لایه رو برام بفرستید. با تشکر
نویسنده : sara sara@yahoo.com ۱۳۸۹ اول تير
چرا ادامه نمیدید ؟ :( خواهش میکنم ادامه بدید مباحث رو
نویسنده : نوید navid.gharapanjeh@gmail.com ۱۳۸۹ بيست و چهارم خرداد
سلام مقاله خیلی خوبی بود ، فقط یک سوال : اگه بخواییم کانکشن استرینگ رو از وب کانفیگ بخونیم چی ؟ و چرا شما کانکشن استرینگ رو داخل کلاس مستقیم نوشتید ؟ باز هم از مقاله خوبتون ممنونم و منتظر پاسختون با تشکر
نویسنده : sara sara@yahoo.com ۱۳۸۹ سيزدهم خرداد
واقعا ممنونم از مقاله های خوبتون نمیدونم چطوری تشکر کنم به اندازه 100 ساعت کلاس آموزشتون مفیده من که هر دفعه مقاله هاتون رو میخونم حسابی دعاتون میکنم بی صبرانه منتظر ادامه بحث هستم آرزو میکنم در کار و زندگی موفق باشید
نویسنده : علی دلشاد delshad@faradade.com ۱۳۸۹ ششم خرداد
سلام آقا وحید دیتابیس داخل پوشه App_Data قرار دارد ، باید آن را در SQL Server اصلی Attach نمایید با تشکر
نویسنده : vahid vahid.safarzadeh@yahoo.com ۱۳۸۹ ششم خرداد
salam lotfan Database in Amuzesham garar bedid.tu file zamime nabud.mer3
نویسنده : وحید صفرزاده vahid.safarzadeh@yahoo.com ۱۳۸۹ اول خرداد
سلام واقعا ممنونم ازتون. منتظر قسمت دوم بودم.شدیدا هم منتظر قسمت های بعدی این مقاله هستم. با تشکر
نویسنده : نادر مينايي nader.mineh@gmail.com ۱۳۸۹ اول خرداد
بسيار عالي . ممنون از ادامه ي اين مبحث مفيد

 
نظر بدهید :
لطفا سوالات فنی خود را در تالار گفتگو www.forum.how2learnasp.net مطرح نمایید
نام :  
ایمیل :    
نظرات :
 
Xml rss feed

 

Valid CSS! Atom rss feed
Ali Delshad Official Site