DataSet Object ادامه قسمت 6
ادامه قسمت 4 . از سری اموزشهای طراحی وب سایت با asp.net.
چون از Try..End Try استفاده کرديم برای کارايی بيشتر با اينکه شی DataAdapter وجود دارد ما Connection را باز و بسته کرديم تا فرمت Try..End ھم به ھم نخورد. برای استفاده در سایت از اين تابع به صورت اتوماتيک عمل می کنيم.ابتدا DataSet برگشتی را بازيابی می کنيم:
Dim k As New DataSet
()k = aaa
سپس از ٤ حلقه ی سپس از ٤ حلقه ی استفاده می کنيم بيرونی ترين حلقه برای دسترسی به جدول ھا و دومين حلقه های سایت برای دسترسی به سطر ھای آن جدول ھا است. حلقه ی داخلی وب ھم برای پيمايش مقادير جدول ھا به صورت يک ارايه ی دو بعدی ھستند:
Dim i As Integer = 0
While i < k.Tables.Count
For Each dr As DataRow In k.Tables(i).Rows
For o As Integer = 0 To dr.Table.Rows.Count – 1
For t As Integer = 0 To dr.Table.Columns.Count – 1
(“Response.Write(dr.Table.Rows(o)(t).ToString &
Next
<“Response.Write(“<br>
Next
Next
i += 1
End While
شمارنده ی 1 برای کنترل حلقه ی While است.از ٠ شروع می شود و تا i > k.Tables.Count ادامه دارد k.Tables.Count ھمانطور که از نامش برمی آيد تعداد جدول ھای موجود در DataSet را برمی گرداند.در داخل تابع نيز نام جدول ھا را از عمد عدد داديم که بتوانيم در حلقه از ان ھا استفاده کنيم.دو حلقه ی داخلی ھم که اولی سطر و دومی ستون را کنترل می کند و اولی تا 1- dr.Table.Rows.Count و دومی تا dr.Table.Columns.Count – 1 ادامه می يابد.از طرف ديگر چون دو حلقه سط و ستون را کنترل می کنند نيازی به به کار بردن چند Response.write نيست و تنھا يکی کافی است چون به تعداد عناصر موجود در جدول چه از نظر سطر و چه از نظر ستون می چرخد. از رايطه در Sql چه قدر می دانيد؟حتما می دانيد که اگر Relation نباشد اصلا پايگاه داده بی معنی است Ado.NET به طور پيش فرض Relation را Support نمی کند.و برای نمايش رابطه در جداول بايد دستی کار کنيد.دو جدول زير را در نظر بگيريد:
اين دو جدول به وسيله ی دو صفت خاصه ی Branch_name به ھم متصل شده اند.که Branch_name در جدول Branch کليد اصلی و Branch_name در جدول Account کليد خارجی است.به اين صورت که نتيجه ی اتصال آن ھا برای شعبه ی emam به صورت زير بايد باشد:
اين نتيجه ی اتصال دو جدول است. اين اتصل به معنای اين است که دو جدول به جای مجزا بودن, بر اساس وجوھات مشترکشان نمايش داده شوند.در جداول بالا اين دو جدول وجوه مشترکی به نام Branch_name دارند که می تواند باعث اتصال دو جدول به گونه ای کاملا بھينه و نرمال باشد. .ين دو جدول در اصل يکی بودند ولی به دليل افزونگی نرمال و تجزيه شدند . Ado.NET اين نتيجه را نشان نمی دھد و اگر آن را اجرا کنيد دو جدول را به صورت مجزا نمايش می دھد.برای نمايش Relation از شی DataRelation استفاده می شود.اگر بخواھيد مغيری از نوع آن ايجاد کرده و new کنيد , 3 آرگومان ورودی خواھد داشت.اولی يک نام ساده به رابطه است.دومی کليد اصلی و سومی کليد خارجی است:
Dim rel As New DataRelation(“name”,”parent column primary key”,”child
(“column foeign key”)
می دانيم کليد ھمان ستون است و اصلی و خارجی بودن کليد نيز دست ماست.پس برای مشخص کردن يک ستون خاص از خاصيت Column شی DataSet استفاده می کنيم:
(“dss.Tables(“branch”).Columns(“branch_name
در اين کد dss نام DataSet است.نام جدول ھم که Branch است و با خاصيت Column به ستون ھای آن دسترسی داريم که Branch_name آن ستون مد نظر ماست و کليداصلی نيز ھست.در زير کد مربوط به کليد خارجی نيز مشخص شده است:
(“dss.Tables(“account”).Columns(“branch_name
حال کافی است متغير از نوع DataRelation را تعريف کنيم:
(“Dim rel As New DataRelation(“MyRelation”
(“dss.Tables(“branch”).Columns(“branch_name
(“dss.Tables(“account”).Columns(“branch_name
پس از تعريف آن بايد آن را به شی Add DataSet کنيم
(dss.Relations.Add(rel
ميبينيد که برای Add کردن رابطه , از متد Relation شی DataSet استفاده شده و سپس گزينه ی Add در آن انتخاب شده.اين امر باعث می شود DataSet اين رابطه را درک کند.البته اگر در اصل اين رابطه در پايگاه داده وجود نداشته باشد با مشکل بر می خوريم.حال می رسيم به مرحله ی دشوار کار که دسترسی و نمايش رابطه است.برای اين کار ابتدا يک حلقه ی ساده و تکراری For .Each می نويسيم برای پيمايش سطر ھای جدولی خاص.اين جدول در اينجا ھمان جدولی است که حاوی کليد اصلی بوده:
For Each row As DataRow In dss.Tables(“branch”).Rows
Next
سپس ستون ھايی از آن را که می خواھيد چاپ شوند را Response.Write می کنيد.اين کار را درون حلقه ی For انجام می دھيم:
(“<Response.Write(row(“branch_name”) & “<br
بعد از آن به اين نکته دقت کنيد که در اينجا جدولی که حاوی کليد اصلی است Parent و جدولی که حاوی کليد خارجی است Child ناميده می شود.پس برای پيمايش جدول Child بايد اول از خاصيت GetChildRows شی DataRow استفاده کنيم و آن را در آرايه ای از نوع DataRow
قرار دھيم: (Dim cr As DataRow() = row.GetChildRows(rel
ادامه این اموزش طراحی وب سایت با asp.net در قسمت بعد.
دیدگاهتان را بنویسید