ایجاد لایهADL کار با داده ها (Data Access Layer):
این لایه با دستکاری داده ها مثل اضافه ، حذف و به روز رسانی آن ها سر و کار دارد که به لطف فناوری های ADO.NET بسیار آسان گردیده
است
به دلیل اینکه قرار بر عدم استفاده از LINQ در این بحث است!!! ما از یک کلاس DataSet جهت ایجاد این لایه استفاده خواهیم کرد
توجه کنید همانطور که دید ما یک تعدا توابع کار با پایگاه داده را نیز ایجاد کرده ایم ولی بیشتر کار های این لایه با استفاده از
DataSet مذکور خواهد بود و در جاهاییی که انجام عملیات با این کلاس دشوار و گاها غیر ممکن می شود از توبع استفاده خواهد شد
از جمله این کار ها دریافت ، ایجاد و بررسی صحت رشته اتصال است چون تا زمانی که اتصال و رشته اتصال مشخص نباشد امکان استفاده از Dataset وجود ندارد
یک مثال دیگر عملیاتی نظیر حذف و ایجاد پایگاه داده ها است(در آموزش های پیشرفته)
ایجاد DataSet:
جهت انجام این کار با استفاده از کلید های Ctrl+Shift+A پنجره Add New Item را باز و گره Data را از سمت چپ انتخاب کنید
از قسمت میانی پنجره Datasetانتخاب و با نام dsWorkWithDb تایید کنید
پروژه را ذخیره کنید
نکته:به این Dataset که امکان کار با جداول را به صورت شیئ گرا می باشد در اصطلاح Typed DataSets می گویند.
افزودن اشیا پایگاه داده:
از Solutin Explorer بر روی Dataset ایجاد شده دوبار کلیک کنید تا وارد حالت طراحی شود
از منوی Tools گزینه Connect to Database را انتخاب کرده از پنجره باز شده Microsoft SQL Server را انتخاب و تایید نمایید
حالا شما می بایست در پنجرهAdd Coonection نام سرور و در صورت نیاز نام کاربری و کلمه عبور به سرور را وارد نمایید سپس از لیست
باز شو select or enter database name پایگاه داده WorkWithDb_Sample1 را که قبلا توسط اسکریپ همراه پروژه ایجاد کرده اید را انتخاب کنید و تایید نمایید
اکنون یک اتصال به این پایگاه داده به Server Explorer اضافه شده است
گره مربوط به پایگاه داده خود را باز و گره Tables را نیز گسترش دهید
تمام جداول را (با استفاده از Ctrl یا Shift ) انتخاب نمایید
جداول انتخاب شده را با موس گرفته و داخل پنجره طراحی Dataset رها کنید
پروژه را ذخیره کنید
مقدار زیادی کار طراحی ین لایه که قبل از ظهور این تکنولوژی کار طاقت فرسایی بود انجام شده است
دستورات TSQL مورد نیاز نیز در مکان های مناسب مطلب در همین پنجره اضافه خواهد شد
قبل از ادامه مطلب همانطور که در قسمت های قبلی آموختید دو کلاس و فضای نامی زیر را از Properties پروژه Import عمومی نمایید
در پنجره فوق نام کلاس WorkWithDb.dsWorkwithDb رو داخل تکست باکس نوشته و دکمه Add User Import رو بزنید
کلاس WorkWithDb.dsWorkwithDbTableAdapters که با افزودن و ذخیره نمودن دیتاست ایجاد شده است را از لیست (معمولا در انتهای آن است) یافته تیک بزنید
پروژه رو ذخیره کنید.
WorkWithDb.dsWorkwithDb
WorkWithDb.dsWorkwithDbTableAdapters
تعریف و نمونه سازی ابزار مدیریت اتصالات این لایه:
اعلان زیر را به کلاس SqlMgr اضافه نمایید:
''' <summary>
''' مدیریت ابزار لایه دسترسی به اطلاعات
''' </summary>
''' <remarks></remarks>
Public Shared ReadOnly AdpMgr As New TableAdapterManager
نکته: این متغیر چون یک بار نمونه سازی شده و در ادامه نیازی به تعریف مجدد ندارد به همین دلیل به صورت ReadOnly تعریف گردید تا از تغییر آن در سایر کد ها جلوگیری شود
نمونه سازی ابزار ها:
چون نمونه اشیائ موجود در AdpMgr نمونه سازی نشده اند متدی را جهت نمونه سازی و تنظیم اتصالی باید که از آن استفاده کنند (اتصال عمومی ساخته شده در مراحل قبل) ایجاد می کنیم
نکته:این متد بعد از ایجاد رشته اتصال و نسبت دادن آن به نمونه اتصال عمومی فراخوانی خواهد شد که اولین نقطه آن متد Loader خواهد بود
این کد ها را به کلاس SqlMgr اضافه نمایید
''' <summary>
'''مقدار دهی به ابزار ها
''' </summary>
''' <remarks></remarks>
Public Shared Sub InitAdapters()
Try
AdpMgr.Connection = GlobalConnection
AdpMgr.tblAnbarKalaGroupTableAdapter = New tblAnbarKalaGroupTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblAnbarTableAdapter = New tblAnbarTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblDbVerTableAdapter = New tblDbVerTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblKalaGroupTableAdapter = New tblKalaGroupTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblKalaInputTableAdapter = New tblKalaInputTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblKalaOutputTableAdapter = New tblKalaOutputTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblKalaTableAdapter = New tblKalaTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblMoshtariTableAdapter = New tblMoshtariTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblPremissionListTableAdapter = New tblPremissionListTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblUserDetailTableAdapter = New tblUserDetailTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblUserPremissionTableAdapter = New tblUserPremissionTableAdapter With {.Connection = GlobalConnection}
AdpMgr.tblUserTableAdapter = New tblUserTableAdapter With {.Connection = GlobalConnection}
Catch ex As Exception
End Try
End Sub
توضیحی در باره تابع:
در هنگام ایجاد dataset برای هر جدول یک TableAdapter ایجاد می شود که وظیفه اجرای دستورت بروی هر جدول را دارد
در ادامه مطلالب و در در جای خود دستور TSQL را به این اشیا اضافه و بعنوان متدی از داخل آنها قابل استفاده خواهیم نمود(در واقع شبیه تابع جلوه خواهند کرد)
این اشیا به صورت تجمیع شده داخل یک کلاس دیگر به نام TableAdapterManager تعریف شده اند ولی نمونه سازی (با NEW) نشده اند
به همین دلیل ما قبل از استفاده از آنها توسط کلمه کلیدی New آنها را نمونه سازی کرده و در همین خط هم جهت راحتی و خلا صه نویسی نمونه اتصال عمومی را به عنوان اتصالی که باید توسط آن با پایگاه داده ارتباط برقرا کنند معرفی می کنیم
در نتیجه ما اتصال عمومی را با رشته اتصال عمومی به سمت هر پایگاه داده که نشانه رویم Dataset نیز از همان استفاده خواهد نمود (یکی از دلایلی که ما رشته اتصال و اتصال عمومی را مورد تاکید زیاد قرار داده و به صورت عمومی معرفی نمودیم در اینجا نمایان است)
DataTable های قویا نام گذاری شده یا Strongly Named DataTable:
وقتی شما جداول را داخل Dataset انداختید در همان حین یک DataTable نیز برای آنها با نام خودشان ایجاد شد
ولی چند تفاوت عمده میان آنها و یک DataTable های عادی وجود دارد و آن دستیابی به فیلد های جدول بع عنوان یکی از خاصیت های این
DataTableمی باشد برای مثال وقتی شما یک پرسجو از جدول tblUser را توسط AdpMgr.tblUserTableAdapter و تابع GetData انجام دادید
نوع بازگشتی آن tblUserDataTable و هردیف(Item) از این شیئ tblUserRow می باشد و نکته در همین آیتم است
برای مثال برای دریافت نام اولین کاربر موجود در این مقدار برگشتی کافی است به صورت زیر بنویسید(به استفاده از نام فیلد به صورت
یک خاصیت توجه کنید):
MytblUserDataTable.Item(0).UserName
همه این کارها بدون یک خط کدنویسی شما و در کمتر 5 دقیقه انجام شده است!
نکته: این لایه رفته رفته تکمیل خواهد شد به این صورت که در برنامه نویسی هر بخش زمانی که احساس نیاز به عملیات پاگاه داده ای غیر موجود دید شد TSQL مورد نظر به TableAdapter مربوطه اضافه و مورد استفاده قرار خواهد گرفت