PDA

View Full Version : data access layer



Future
چهارشنبه 04 آذر 1388, 04:54 صبح
سلام دوستان, من توی دیتا اکسس لایر(DAL) به دیتابیسم کانکشن ایجاد کردم و دیتاست . بعد StoreProcedureی توی اس کیو ال نوشته بودم رو اینجا نیز لود کردم. webapplication من باید یه مقدار رو از یه textbox بکیره و به storeprocedure ارسال کنه. بعدش اگه جواب صحیح بود یه پیغام چاپ کنه. حالا نمیدونم باید چی کار کنم. آیا باید method که مقدار می گیره را توی Business logic layer تعریف کنم و خرجی رو تو presentation Layer?

ممنون میشم اگه اساتید یه لطفی کنن و مراحل را توضیح بدن.

Mostafa_Dindar
چهارشنبه 04 آذر 1388, 10:20 صبح
فرض كن ميخواي يك خبر خيلي ساده درج كني و اطلاعات فرم رو درج كني . در رويداد كليك Button درج در UI چيزي شبيه اين :

protected void btnInsert_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
try
{
News n = new News();
n.Brief = txtBrief.Text;
n.Body = txtBody.Text;
n.InsertDate = System.DateTime.Now;
n.Source = txtSource.Text;

int Id = NewsManager.Insert(n);
if (Id > 0)
{
lblStatus.Text = string.Format("خبر با شناسه{0} با موفقيت درج شد", Id);
DataList1.DataBind();
clearFomr();
}

}
catch (Exception ex)
{
lblStatus.Text = "بروز خطا در درج خبر" ;
}
}
}در واقع شما يك شي از نوع News تعريف كردي و Property هاي اونو مقدار دهي كردي و از متد Insert در لايه BLL رو فراخوني كردي يعني NewsManager. همانطور كه متوجه شدي متد Insert شناسه ركورد تازه درج شده رو برميگردونه و از اون بعنوان يك فاكتور جهت تشخيص درج صحيح استفاده ميشه .
حالا شما در لاه Bll بايد Validation و Bussiness Rules ها رو اعمال كني و دوباره به Dalبفرستي
يك چيزي شبيه به اين :

public static int Insert(News ObjNews)
{
ObjNews.Id = NewsDB.Insert(ObjNews);
return ObjNews.Id;
}مشخصه كه مد Insert در لايه Dal فراخوني شده
لايه Dal هم كه ديگه خيلي سادست ولي بايد StoredProcedure شما هم شناسه آخرين ركورد رو برگردونه . من اينطوري مينويسم ولي هر كس هرجور خواست ميتونه بنويسه :

public static int Insert(News ObjNews)
{
SqlParameter[] arParams = new SqlParameter[6];

arParams[0] = new SqlParameter("@Brief",SqlDbType.NVarChar );
arParams[0].Value = ObjNews.Brief;

arParams[1] = new SqlParameter("@Body",SqlDbType.NVarChar );
arParams[1].Value = ObjNews.Body;

arParams[2] = new SqlParameter("@Image",SqlDbType.NVarChar );
arParams[2].Value = ObjNews.Image;

arParams[3] = new SqlParameter("@Source",SqlDbType.NVarChar );
arParams[3].Value = ObjNews.Source;

arParams[4] = new SqlParameter("@InsertDate",SqlDbType.DateTime );
arParams[4].Value = ObjNews.InsertDate;


arParams[5] = new SqlParameter("@Id",SqlDbType.Int );
arParams[5] .Direction = ParameterDirection.Output;

SqlHelper.ExecuteNonQuery(AppConfiguration.Connect ionString ,CommandType.StoredProcedure, "spNews_Insert", arParams);
return (int)arParams[5].Value;
}

Future
دوشنبه 09 آذر 1388, 04:35 صبح
من متد DAL رو پیاده سازی کردم و لی منظوزتون از BLL رو متوجه نمیشم. چه چیزی باید دقیقا اونجا درج بشه. ممنون میشم. آیا من باید دقیقا همان کلاسی که در DAL پیاده کردم رو دوباره در BLL پیاده سازی کنم.
ممنون میشم اگه یه مقدار توضیح بیشتر بدید.