منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : الفرق بين DataSet وDataTable
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته
أستخدم DataTable بكثرة وتفي بالغرض ولم أعرف متى أستخدم DataSet  مادامت موجودة في لغة الفيجوال لم توضع دون سبب.
سؤالي:
     متى أستخدم DataSet و DataTable ؟

تمنياتي للجميع بالتوفيق
وعليكم السلام ورحمة الله وبركاته

تفضل أخي راجع هذا الموضوع
http://vb4arb.com/vb/showthread.php?tid=14362
وعليكم السلام ورحمة الله وبركاته ،،

بإختصار :

DataSet = قاعدة بيانات مؤقتة تحمل عدة جداول فقط اثناء عمل البرنامج وتفقد البيانات بمجرد قفل البرنامج

DataTable = جدول اما ان يكون داخل الداتاسيت أو جدول مستقل لوحدة ايضاً مؤقت فقط اثناء عمل البرنامج وتفقد البيانات بمجرد قفل البرنامج

شرح الداتاسيت :


كود :
Dim dp As New System.Data.OleDb.OleDbDataAdapter("select * from table1", con)

        Dim ds As New DataSet

'هنا لاحظ الداتا ادابتر قام بتعبئة الداتاسيت بدون تحديد اسم للجدول
        dp.Fill(ds)
'هنا اسندنا الجدول الأول الذي يحمل انديكس صفر كمصدر للداتاقريد ولا بد من تحديد اسم الجدول أو رقم الإنديكس
        DataGridView1.DataSource = ds.Tables(0)


طيب لو افترضنا نريد ايضاً تبعئة الداتاسيت بجدول آخر مع الحفاظ بالجداول الموجودة في الداتاسيت


كود :
Dim dp As New System.Data.OleDb.OleDbDataAdapter("select * from table2", cn)

'لاحظ هنا لم ننشئ داتاسيت جديدة لأننا لو انشأناها جديدة سوف تفقد الجداول السابقة الموجودة بها
dim ds as new dataset #####

'لاحظ هنا الداتا ادابتر قام بتعبئة الداتاسيت بجدول بإسم تيبل2
        dp.Fill(ds, "table2")

'لإستخدام الجدول بإسمه كمصدر للداتاقريد يكون بالشكل هذا :
        DataGridView1.DataSource = ds.Tables("table2")

شرح الداتاتيبل :

ولو فقط لدينا جدول واحد مستقل ولا يوجد داتاسيت ولا نريد التعامل مع الداتاسيت يكون كالتالي :

كود :
Dim dp As New OleDbDataAdapter("select * from tb2", conn)
        Dim dt As New DataTable

'هنا الداتا ادابتر قام بتعبئة الداتاتيبل
        dp.Fill(dt)

'هنا اسندنا الداتاتيبل كمصدر للداتاقريد
       DataGridView1.DataSource = dt
وعليكم السلام ورحمة الله وبركاته

ملخص واضافة لما قدمه كلا من اخوتى

الـ DataSet : تعنى قاعدة البيانات
والـ DataTable : هو الجدول الذى يتواجد داخل قاعدة البيانات

فلاحظ التالى لما تم من شرح للاخ حريف برمجة

كود :
' DataSet
dp.Fill(ds, "اسم قاعدة البيانات")
' DataTable
dp.Fill(dt)

لنقوم انك سميت اسم قاعدة البيانات باسم T1

عند استدعاء قيمة يتكون من DataSet تكون
كود :
TextBox1.Text = ds.tables("T1")(0)(0)

وعند استدعاء قيمة من DataTable تكون
كود :
TextBox1.Text = dt(0)(0)

فلاحظ بينهم
طيب لماذا تم عملها وكيف يمكن استغلالها والاستفادة منها شكل اكبر

تخيل انك تقوم بعمل عدد 3 استعلام ى زر واحد
فى طبيعة الحال بالمنط لو بتتعامل بـ DataTable هتنشاء لها 3 مثل
كود :
       Dim dt1 As New DataTable
       Dim dt2 As New DataTable
       Dim dt3 As New DataTable
'أو بهذا الشكل
       Dim dt1, d2, dt3 As New DataTable

عشان بنهاية الامر تعطي كل استعلام قيمها داخل كل منه هذا الشكل
كود :
       dp1.Fill(dt1)
       dp2.Fill(dt2)
       dp3.Fill(dt3)

طيب تعال نشوف هنا كده لو تم استخدم الكود نفسه بس بشكل مختلف
كود :
       dim ds As New DataSet

ثم تم ترحيل بيانات الاستعلام بهذا الشكل
كود :
       dp1.Fill(ds, "T1")
       dp2.Fill(ds, "T2")
       dp3.Fill(ds, "T3")

لاحظ الفرق هنا كده بين استخدام كلا منهم
الطريقة الاولى انت اجبرت البرنامج ان ينشاء لكل جدول قاعدة بيانات غير معرفة اى DataSet خاصة لكل جدول
كن عند استخدام الطريقة الثانية انت اجبرته ان ينشاء قاعدة بيانات واحدة فقط وتم تعيفها ووضع كل الجداول بها

المفيد هنا ماذا : انك غير مجبر ان تجعل ى كل فروم عند زل زر او حدث لاستعلام ن تنشاء له DataTable
بل باختصار يمكنك عمل DataSet واحدة ى اول كود الفروم ويتم تعري كل استعلام لكل جدول داخل الـ DataSet

منها قللت من استهلاك موارد الجهاز واصبح البرنامج بشكل اكبر اسرع واخف

اتمنى ان الصورة والشرح يكون وافى وملخص ما تريد معرفته تماماً

تحياتى لك
وتمنياتى لك الوفيق
بارك الله فيكم على المساعده ..
جزاكم الله خيراً وشكراً لكم أساتذة الكرام
[/url]
[url=http://vb4arb.com/vb/member.php?action=profile&uid=30072][b]princelovelorn[/b]
[b]حريف برمجة[/b] 
[b]elgokr[/b] 

الله يوفقكم ويزيدكم من علمه
الشكر لله
وجزاك الله كل خير

تحياتى لك
وتمنياتى لك التوفيق