سؤال

ما هو أفضل أسلوب لمزامنة DataSet مع البيانات الموجودة في قاعدة البيانات؟وهنا المعلمات:

  • لا يمكننا ببساطة إعادة تحميل البيانات لأنها مرتبطة بعنصر تحكم واجهة المستخدم الذي ربما قام المستخدم بتكوينه (إنها شبكة شجرية يمكن توسيعها/طيها)
  • لا يمكننا استخدام علامة التغيير (مثل UpdateTimeStamp) في قاعدة البيانات لأن التغييرات لا تتدفق دائمًا عبر التطبيق (على سبيل المثال.يمكن لـ DBA تحديث حقل ببيان SQL)
  • لا يمكننا استخدام مشغل التحديث في قاعدة البيانات لأنه نظام متعدد المستخدمين
  • نحن نستخدم مجموعات بيانات ADO.NET
  • يمكن تغيير حقول متعددة لصف معين

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

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

هل كان لدى أي شخص سيناريو مماثل؟ماذا فعلت لحل المشكلة؟حتى لو لم تواجه مشكلة مماثلة، فنحن نقدر أي توصية لإيجاد حل.

شكرًا

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

المحلول

يعمل DataSet.Merge بشكل جيد لهذا الغرض لو لديك مفتاح أساسي محدد لكل DataTable؛ستقوم مجموعة البيانات برفع الأحداث التي تم تغييرها إلى أي عناصر تحكم في واجهة المستخدم الرسومية المرتبطة بالبيانات

إذا كان الجدول الخاص بك صغيرًا، فيمكنك فقط إعادة قراءة جميع الصفوف ودمجها بشكل دوري، وإلا فإن تحديد المجموعة المراد قراءتها بطابع زمني يعد فكرة جيدة - ما عليك سوى إخبار مسؤولي قواعد البيانات باتباع القواعد وتحديث الطابع الزمني؛-)

هناك خيار آخر - وهو قليل من العمل - وهو الاحتفاظ بقائمة انتظار الصف المتغير (الطابع الزمني، معرف الصف) باستخدام مشغل أو إجراء مخزن، وإسناد استعلامات التحديث بعيدًا عن الطابع الزمني في قائمة الانتظار؛سيكون هذا أكثر كفاءة إذا كان الجدول الأساسي يحتوي على الكثير من الصفوف، مما يسمح لك (عبر صلة داخلية في سجل قائمة الانتظار) بسحب الصفوف التي تم تغييرها فقط منذ آخر وقت للاستقصاء.

نصائح أخرى

أعتقد أنه سيكون من الأسهل تخزين قائمة بالعقد التي قام المستخدم بتوسيعها (بافتراض أنه يمكنك تحديد كل واحدة منها بشكل فريد)، ثم إعادة تحميل البيانات وإعادة ربطها بالعرض الشجري، ثم توسيع جميع العقد توسعت سابقا.

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