سؤال

ولدي استعلام SQL التي يمكن اعادة عدد كبير من الصفوف عبر DataReader. فقط أنا الآن الاستعلام عن DB تحويل مجموعة النتائج في قائمة (من) والبيانات ربط الشبكة إلى قائمة.

وهذا يمكن أن يؤدي في بعض الأحيان في مهلة نظرا لحجم البيانات.

ولدي حاليا الإعداد ثلاثة طير حيث من UI يتصرف على قائمة الكائنات في طبقة رجال الأعمال.

ويمكن لأي شخص أن يقترح أفضل نهج لتنفيذ تحميل كسول في هذا scenatrio؟ أم أن هناك طريقة أخرى لتنفيذ هذا نظيفة؟

وأنا حاليا باستخدام Visual Studio 2005 و. NET 2.0

وتحرير: كيف ستستخدم الترحيل في هذه الحالة؟

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

المحلول

وLINQ إلى SQL يبدو من المنطقي في موقفك.

وإلا إذا لأي سبب من الأسباب، وكنت لا تريد استخدام LINQ إلى SQL (على سبيل المثال، كنت على .NET Framework 2.0)، والنظر في كتابة مكرر أن يقرأ DataReader وتحولها إلى كائن المناسبة:

IEnumerator<MyObject> ReadDataReader() {
  while(reader.MoveNext())
    yield return FetchObject(reader);
}

نصائح أخرى

هل تحتاج لاعادة جميع البيانات في وقت واحد؟ هل يمكن أن تفكر في الترحيل.

وربما تكون ترحيل الحل الأفضل. إذا كنت تستخدم SQL Server 2005 أو أكبر كان هناك أضافت ميزة جديدة. ROWNUMBER () :

WITH MyThings AS
(
    SELECT ThingID, DateEntered,
    ROW_NUMBER() OVER (ORDER BY DateEntered) AS 'RowNumber'
    FROM dbo.Things 
) 
SELECT * 
FROM ThingDetails
WHERE RowNumber BETWEEN 50 AND 60;

وهناك مثل سبيل المثال بواسطة ديفيد هايدن وهو أمر مفيد جدا في إثبات SQL.

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

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