سؤال

أستخدم حاليًا DataTable للحصول على نتائج من قاعدة بيانات يمكنني استخدامها في الكود الخاص بي.

ومع ذلك، تظهر العديد من الأمثلة على الويب استخدام DataSet بدلاً من ذلك والوصول إلى الجدول (الجداول) من خلال طريقة المجموعات.

هل هناك أي ميزة، سواء من ناحية الأداء أو غير ذلك، لاستخدام DataSets أو DataTables كطريقة تخزين لنتائج SQL؟

هل كانت مفيدة؟

المحلول

يعتمد الأمر حقًا على نوع البيانات التي ستعيدها.نظرًا لأن DataSet (في الواقع) هي مجرد مجموعة من كائنات DataTable، فيمكنك إرجاع عدة مجموعات متميزة من البيانات إلى كائن واحد، وبالتالي أكثر قابلية للإدارة.

من ناحية الأداء، من المرجح أن تصاب بعدم الكفاءة من الاستعلامات غير المحسنة بدلاً من الاختيار "الخاطئ" لبناء .NET.على الأقل، هذه كانت تجربتي.

نصائح أخرى

أحد الاختلافات الرئيسية هو أن DataSets يمكنها الاحتفاظ بجداول متعددة ويمكنك تحديد العلاقات بين تلك الجداول.

إذا كنت تقوم بإرجاع مجموعة نتائج واحدة فقط على الرغم من أنني أعتقد أن DataTable سيكون أكثر تحسينًا.أعتقد أنه يجب أن يكون هناك بعض النفقات العامة (الممنوحة صغيرة) لتقديم الوظائف التي تقوم بها DataSet وتتبع جداول DataTables المتعددة.

في الإصدار 1.x، كانت هناك أشياء لا تستطيع DataTables القيام بها والتي تستطيع مجموعات البيانات القيام بها (لا أتذكر بالضبط ما هي).تم تغيير كل ذلك في 2.x.أعتقد أن هذا هو السبب وراء استمرار استخدام الكثير من الأمثلة لـ DataSets.يجب أن تكون DataTables أسرع لأنها خفيفة الوزن.إذا كنت تقوم بسحب مجموعة نتائج واحدة فقط، فهذا هو خيارك الأفضل بين الاثنين.

إحدى ميزات DataSet هي أنه إذا كان بإمكانك استدعاء عبارات تحديد متعددة في إجراءاتك المخزنة، فستحتوي DataSet على DataTable واحد لكل منها.

هناك بعض التحسينات التي يمكنك استخدامها عند تعبئة DataTable، مثل استدعاء BeginLoadData() وإدراج البيانات ثم استدعاء EndLoadData().يؤدي هذا إلى إيقاف بعض السلوكيات الداخلية داخل DataTable، مثل صيانة الفهرس، وما إلى ذلك.يرى هذا المقال لمزيد من التفاصيل.

عندما تتعامل فقط مع جدول واحد على أي حال، فإن أكبر اختلاف عملي وجدته هو أن DataSet يحتوي على طريقة "HasChanges" ولكن DataTable لا يفعل ذلك.كلاهما لهما "GetChanges" ومع ذلك، لذا يمكنك استخدام ذلك واختبار القيمة الخالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top