تقييم الموضوع :
  • 1 أصوات - بمعدل 1
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] الـDataSet تحت المجهر
#1
السلام عليكم ورحمة الله وبركاته
الحمد لله رب العالمين، والصلاة والسلام على أشرف خلق الله أجمعين، سيدنا محمد صلى الله عليه وعلى آله وصحبه أجمعين، وبعد

أحييكم أخوتي في هذا الصرح العلمي، وأدعوكم إلى متابعة بعض ما تعلمته بخصوص الـDataSet، بشيء من التفصيل.

كمبتدئ في البرمجة، لم أعرف الكثير عن هذا الكلاس، وفي برامجي المتواضعة لم أستفد من إمكانياتها بشكل كافٍ.

قمتُ بالبحث في الشبكة عن كل ما يتعلق بهذا الكلاس من معلومات، وترجمتُ بعض ما وجدته وطبقته، واستفدت الكثير منه، ووجب عليّ توفيره للأخوة المبتدئين، كنوع من العرفان لهذا المنتدى المبارك.

في هذا الموضوع، سأتحدث عن الـDataSet ، عن مكوناتها، وطريقة إنشائها، وسأشرح بعض أهم خصائصها، وأهم وظائفها.

فأبدأ على بركة الله..





الكلاس DataSet

هي أماكن لتخزين جداول البيانات في الذاكرة، وهي مؤقتة، تفقد البيانات التي تحملها بانتهاء العملية.

كل DataSet تحتوي على جدول بيانات DataTable أو أكثر وكذلك على علاقات DataRelation يمكن إنشاؤها بين الجداول، وعلى DataView. كل DataTable يحتوي على سجلات أو صفوف DataRows، وكل DataRow يحتوي على مجموعة من الأعمدة أو الحقول DataColumns. وهذا الكلاس يتبع مباشرة لفضاء الأسماء System.Data.

يعني، قبل البدء في كتابة الأكواد يجب استدعاء هذا الفضاء:

PHP كود :
Imports System.Data 






إنشاء DataSet

نستطيع إنشاء DataSet جديدة من خلال استدعاء “منشيء الـDataSets”، أو ما يسمى بالإنجليزية DataSet Constructor،

وبشكل اختياري؛ يمكننا إعطاؤها وصفاً ، وفي حال ترك هذا الخيار يتم إعطاؤها اسماً افتراضياً وهو: “NewDataSet”.

PHP كود :
Dim customerOrders As DataSet = New DataSet(“CustomerOrders”

أو:
PHP كود :
Dim customerOrders As New DataSet(“CustomerOrders”)

MsgBox(customerOrders.DataSetNameMsgBoxStyle.Information“DataSet Name is:



في الكود السابق تم إنشاء DataSet بالاسم CustomerOrders، وفي الكود التالي يتم إنشاء DataSet بالاسم الافتراضي:

PHP كود :
Dim customerOrders As New DataSet 

ولنجرب هذا الكود أيضاً:

PHP كود :
Dim customerOrders As New DataSet

MsgBox
(customerOrders.DataSetNameMsgBoxStyle.Information“DataSet Name is:





أهم خصائص الـDataSet

ككل كائن ، تدعم الـDataSet مجموعة من الخصائص، لعل من أبرزها:

الخاصية DataSetName:

ومن خلالها يمكن ضبط / استرجاع اسم الـDataSet الحالية.

PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet(“SuppliersProducts”)

MsgBox(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:

الخاصية IsInitialized :

وترجع قيمة منطقية تحدد ما إذا تم تهيئة الـDataSet أم لا.
PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet(“SuppliersProducts”)

MsgBox(dataSet.IsInitializedMsgBoxStyle.Information“IsInitialized”



الخاصية Tables:

ومن خلالها يمكن استرجاع تجمع الـDataTables التابعة لها. أو اختيار جدول محدد عن طريق اسمه أو رقم تسلسله. سأتطرق لها في أمثلة الفقرات التالية





DataSet Methods

كما تدعم الـDataSet مجموعة من الوظائف أو Methods (لم أجد ترجمة أخرى لها) لعل من أبرزها:

الوظيفة AcceptChanges:

وتقوم بتطبيق كافة التغييرات التي طرأت على الـDataSet ومحتوياتها، منذ آخر مرة تم استدعاء هذه الوظيفة.

PHP كود :
Private Sub AcceptChanges()

   
Dim myDataSet As DataSet

   myDataSet 
= new DataSet()

 

   
' Not shown: methods to fill the DataSet with data.

   Dim t As DataTable

 

   t = myDataSet.Tables("Suppliers")

 

   ' 
Add a DataRow to a table.

   
Dim myRow As DataRow

   myRow 
t.NewRow()

   
myRow("CompanyID") = "NWTRADECO"

   
myRow("CompanyName") = "NortWest Trade Company"

 

   ' Add the row.

   t.Rows.Add( myRow )

 

   ' 
Calling AcceptChanges on the DataSet causes AcceptChanges to be

   
' called on all subordinate objects.

   myDataSet.AcceptChanges()

End Sub 

الوظيفة Clear:

وتقوم بمسح كافة بيانات الـDataSet وذلك من خلال مسح كافة السجلات في كافة الجداول التي تتبع هذه الـDataSet.

PHP كود :
dataSet.Clear() 


الوظيفة Clone:

وتقوم بنسخ تركيبة الـDataSet بما في ذلك تركيبات الجداول والعلاقات، دون نسخ البيانات التي تحملها.
PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet(“SuppliersProducts”)

MsgBox(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:)

 

Dim ClonedDataSet As DataSet

ClonedDataSet 
dataSet.Clone()

MsgBox(ClonedDataSet.DataSetNameMsgBoxStyle.Information“ClonedDataSet Name is:


ولنجرب الكود بدون إعطاء اسم للـDataSet:

PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet

MsgBox
(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:)

Dim ClonedDataSet As DataSet

ClonedDataSet 
dataSet.Clone()

MsgBox(ClonedDataSet.DataSetNameMsgBoxStyle.Information“ClonedDataSet Name is:

الوظيفة Copy:

وتقوم بنسخ تركيبة الـDataSet بما في ذلك تركيبات الجداول والعلاقات مع كافة البيانات التي تحملها.

PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet(“SuppliersProducts”)

MsgBox(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:)

 

Dim CopiedDataSet As DataSet

CopiedDataSet 
dataSet.Copy()

MsgBox(CopiedDataSet.DataSetNameMsgBoxStyle.Information“CopiedDataSet Name is:

ولنجرب الكود بدون إعطاء اسم للـDataSet:

PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet

MsgBox
(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:)

 

Dim CopiedDataSet As DataSet

ClonedDataSet 
dataSet.Copy()

MsgBox(CopiedDataSet.DataSetNameMsgBoxStyle.Information“CopiedDataSet Name is:


الوظيفة GetChanges:

تأخذ نسخة من الـDataSet والتي تم إجراء عمليات تعديل وتغيير عليها منذ أن تم تعبئتها بالبيانات أو منذ آخر مرة تم تطبيق الوظيفة AcceptChanges، وتخزنها في DataSet جديدة.



الوظيفة HasChanges:

وترجع قيمة منطقية (True/False) تحدد ما إذا تم تغيير في محتويات الـDataSet، والتغييرات تشمل إضافة صفوف جديدة، أو تعديل صفوف موجودة، أو حذف لبعض أو كل الصفوف.

PHP كود :
If dataSet.HasChanges True Then

     MsgBox
(“There are some changes”)

Else

     
MsgBox(“The DataSet was not changed”)

End If 

الوظيفة Merge(DataSet):

وتقوم بدمج الـDataSet وتركيبتها كاملةً مع تركيبة الـDataSet الحالية.

ولكي نفهمها نكتب:

PHP كود :
Dim FirstDataSet As New DataSet(“FirstDataSet”)

Dim FirstTable As New DataTable(“FirstTable”

وهنا قمنا بإنشاء DataSet وDataTable، الخطوة التالية هي ضم الجدول إلى FirstDataSet:

PHP كود :
FirstDataSet.Tables.Add(FirstTable

والآن: FirstDataSet تحتوي على جدول واحد هو FirstTable، ويمكننا التحقق من ذلك عن طريق كتابة:

PHP كود :
MsgBox(FirstDataSet.Tables(0).TableName

والآن: نقوم بإنشاء DataSet جديدة باسم SecondDataSet فارغة ولا تحتوي على أي جدول:

PHP كود :
Dim SecondDataSet As New DataSet(“SecondDataSet”

ونقوم بدمج محتويات الـFirstDataSet مع محتويات الـSecondDataSet:

PHP كود :
SecondDataSet.Merge(FirstDataSet

وهنا تمت عملية الدمج، فعند كتابة:

PHP كود :
MsgBox(SecondDataSet.Tables(0).TableName

يعطينا نفس اسم الجدول الموجود في FirstDataSet، وهذا دليل على صحة العملية.


الوظيفة Merge(DataTable):

سأشرحها لاحقاً عند الحديث عن الـDataTable إن شاء الله.


الوظيفة Merge(DataSet, Boolean):

وتقوم بدمج الـDataSet وتركيبتها كاملةً مع تركيبة الـDataSet الحالية، مع قيمة منطقية تحدد ما إذا كانت عملية الدمج تشمل التغييرات أم لا.

PHP كود :
SecondDataSet.Merge(FirstDataSetFalse

هنا تتم عملية الدمج بحيث لا تشمل التغييرات.

PHP كود :
SecondDataSet.Merge(FirstDataSetTrue

هنا تتم عملية الدمج بحيث تشمل التغييرات.


الوظيفة RejectChanges:

وتقوم بإلغاء كافة التغييرات التي طرأت على الـDataSet منذ تعبئتها بالبيانات لأول مرة، أو منذ آخر مرة تم استدعاء الطريقة AcceptChanges فيها.



الوظيفة Reset:

وتقوم بمسح محتويات الـDataSet وإرجاعها إلى حالتها السابقة.

PHP كود :
Dim FirstDataSet As New DataSet(“FirstDataSet”)

Dim FirstTable As New DataTable(“FirstTable”)

FirstDataSet.Tables.Add(FirstTable)

MsgBox(FirstDataSet.Tables(0).TableName)

 

Dim SecondDataSet As New DataSet(“SecondDataSet”)

SecondDataSet.Merge(FirstDataSet)

MsgBox(SecondDataSet.Tables(0).TableName)

 

SecondDataSet.Reset()

MsgBox(SecondDataSet.Tables(0).TableName, , “after reset is called”
عند تنفيذ الكود السابق، وبعد استدعاء الوظيفة Reset يظهر خطأ يقول: Cannot find table 0 ، ويعني أن الـSecondDataset أرجعت إلى سابق عهدها فارغة.





تنويه

هذه المواضيع وغيرها اقتبستها من كتاب أعمل عليه حالياً لشرح كل ما يتعلق بالـDataSet ومكوناتها بالتفصيل، وكذلك على طرق التعامل مع قواعد البيانات المختلفة، وسأنشر الكتاب بصيغة إلكترونية مجانية إن شاء الله متى انتهيت منه.

كل الأكواد في هذه السلسلة مجربة على لغة فجول بيسك دوت نيت 2010.





وأخيراً..

مازالت هناك الكثير من الخصائص الأخرى بالطبع، وكذلك وظائف أخرى تفيد المتقدمين في التعامل مع قواعد البيانات في لغة فجول بيسك 2010، ولكنني آثرت الحديث عن أهم تلك الخصائص والوظائف، مراعياً أن الموضوع موجهة للمبتدئين أمثالي.

كما أرجو منكم مشاركتي بتعليقاتكم وملاحظاتكم وتصحيحاتكم.

شكراً لكم.
الرد }}}}
#2
السلام عليكم

جزاك الله خيرا و وفقك لما يحبه ويرضاه

تحياتي
الرد }}}}
تم الشكر بواسطة: أبوبكر سويدان
#3
جبرت بخاطري الله يجبر بخاطرك Blush
الرد }}}}
تم الشكر بواسطة:
#4
(12-01-14, 01:12 PM)أبوبكر سويدان كتب : الوظيفة Copy:

وتقوم بنسخ تركيبة الـDataSet بما في ذلك تركيبات الجداول والعلاقات مع كافة البيانات التي تحملها.

PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet(“SuppliersProducts”)

MsgBox(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:)

 

Dim CopiedDataSet As DataSet

//ClonedDataSet = dataSet.Copy()

CopiedDataSet dataSet.Copy()

MsgBox(CopiedDataSet.DataSetNameMsgBoxStyle.Information“CopiedDataSet Name is:

ولنجرب الكود بدون إعطاء اسم للـDataSet:

PHP كود :
Dim dataSet As DataSet

dataSet 
= New DataSet

MsgBox
(dataSet.DataSetNameMsgBoxStyle.Information“DataSet Name is:)

 

Dim CopiedDataSet As DataSet

//ClonedDataSet = dataSet.Copy()

CopiedDataSet dataSet.Copy()

MsgBox(CopiedDataSet.DataSetNameMsgBoxStyle.Information“CopiedDataSet Name is:

بسم الله الرحمن الرحيم
و عليكم السلام و رحمة الله و بركاته,

أخي العزيز أبو بكر سويدان, و الله كأنك كنت تعرف بأنني في أمس الحاجة إلى هكذا معلومات حول DataSet حيث أنني لم أقرأ عنها الكثير و إنما تعلمتها بنفسي و هذا يعتبر في بعض الأحيان خطأ لما يترتب عليه البرمجة بدون إحتراف ... و لكنك وفيت و كفيت في موضوع و جزاك الله خيراً عليه و جعله في ميزان حسناتك ...

بالإضافة إلى أنني وجدت خطأ بسيط في كود حضرتك و ربما أنك لم تنتبه له أثناء كتابته بسبب السرعة في كتابته ... و قمت بإضافة تعديل موضح في الكود يوضح مكان الخطأ مع التصحيح ..



جزاك الله خيراً ...


السلام عليكم
الرد }}}}
تم الشكر بواسطة: أبوبكر سويدان
#5
السلام عليكم ورحمة الله
أشكرك أخي hoob.computer على التصحيح، جزاك الله خيراً، وأتمنى لك الاستفادة.
Smile
الرد }}}}
تم الشكر بواسطة: hoob computer
#6
(26-01-14, 01:24 PM)أبوبكر سويدان كتب : السلام عليكم ورحمة الله
أشكرك أخي hoob.computer على التصحيح، جزاك الله خيراً، وأتمنى لك الاستفادة.
Smile

و جزاك الله خيراً أخي الكريم, و لكن من الأفضل تصحيح الكود في مشاركتك الاولى كي لا يختلط الأمر على المبتدئين Smile


السلام عليكم
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Heart [VB.NET] الـDataTable تحت المجهر أبوبكر سويدان 2 2,026 01-02-14, 09:52 PM
آخر رد: أبوبكر سويدان

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم