ایجاد رابطه در DataSet
زمانی که جداولی را در DataSet قرار میدهیم ، DataSet به صورت پیش فرض رابطه های بین جداول که در دیتابیس وجود دارد را ایجاد نمیکند برای ایجاد رابطه مابین جداول در DataSet باید از کلاس DataRelation استفاده کنیم .
ایجاد رابطه مابین جداول باعث تسریع در گرفتن رکوردهای مرتبط با رکوردی از جدول پدر می شود .
برای درک بهتر فرض کنید دو جدول Product و Categories داریم . هر گروه می تواند شامل یک یا بیش از یک رکورد در جدول ” محصولات ” داشته باشد در واقع رابطه بین دو جدول فوق یک به چند می باشد. قصد داریم با انتخاب هر رکورد در Categoires رکورد های معادل آن را بدون جستجو کردن بدست آوریم . ابتدا جداول فوق را از دیتابیس خوانده و در DataSet قرار میدهیم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
String SqlCat=”Select CategoryId,CategoryName from Categories”; String SqlProduct=”Select ProductName,CategoryID from Products”; SqlDataAdapter DataAdapterObj; DataSet ds=new DataSet(); DataAdapterObj= new SqlDataAdapter(SqlCat,ConnectionStringObj); DataAdapterObj.Fill(ds,”Categories”); DataAdapterObj= new SqlDataAdapter(SqlProduct,ConnectionStringObj); DataAdapterObj.Fill(ds,”Products”); |
تا اینجا فقط دو جدول فوق را از دیتابیس خوانده ایم و در DataSet قرار داده ایم .
برای ایجاد رابطه باید یک شی از کلاس DataRelation بسازید ، زمانی که شی مربوطه را ساختید باید سه آرگومان برای سازنده آن تعیین کنید که عبارتند از :
نام رابطه ، column مربوط به کلید اصلی در جدول پدر و column مربوط به کلید خارجی در جدول فرزند .
کدهای زیر نمونه ای از ایجاد رابطه بین دو جدول فوق می باشد :
1 2 3 4 5 6 7 |
DataRelation Relate=new DataRelation("CateGorAndProduct", ds.Tables["Categories"].Columns["CategorID"] , ds.Tables["Products"].Columns["CatalogID"] ) ; ds.Relations.Add(Relate); |
با اجرا کدهای بالا رابطه بین دو جدول ساخته خواهد شد .اما چگونه رکورد های مرتبط به یک رکورد پدر را بخوانیم؟
با استفاده از فراخوانی متد ()DataRow.GetChildRows می توانید به رکوردهایی از جدول Products که مرتبط با Categories مورد نظر هستند دسترسی پیدا کنید .
1 2 3 4 5 |
foreach (DataRow item in ds.Tables["Categories"].Rows) { //... DataRow[] ChilRows = item.GetChildRows(Relate); } |
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.