سؤال

نحن بحاجة إلى العودة فرعية من السجلات و لذلك نستخدم الأمر التالي:

using (SqlCommand command = new SqlCommand(
                    "SELECT ID, Name, Flag, IsDefault FROM (SELECT ROW_NUMBER() OVER (ORDER BY @OrderBy DESC) as Row, ID, Name, Flag, IsDefault FROM dbo.Languages) results WHERE Row BETWEEN ((@Page - 1) * @ItemsPerPage + 1) AND (@Page * @ItemsPerPage)",
                    connection))

انا SqlCacheDependency أعلن مثل هذا:

SqlCacheDependency cacheDependency = new SqlCacheDependency(command);

ولكن على الفور بعد تشغيل الأمر.ExecuteReader() تعليمات ، تغيير قاعدة الملكية من SqlCacheDependency كائن يصبح صحيحا على الرغم من أنني لم تتغير نتيجة الاستعلام في أي حال من الأحوال!و هذا نتيجة هذا الاستعلام هو لا تبقى في ذاكرة التخزين المؤقت.

HttpRuntime.Cache.Insert( cacheKey, list, cacheDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(AppConfiguration.CacheExpiration.VeryLowActivity));

هل لأن الأمر لديه 2 حدد البيانات ؟ هو ROW_NUMBER()?إذا كان الجواب نعم, هل هناك أي طريقة أخرى إلى رقم الصفحات النتائج ؟

الرجاء المساعدة!بعد ساعات كثيرة جدا ، قليلا سوف يكون موضع تقدير كبير!شكرا لك

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

المحلول

تشغيل في نفس القضية وإيجاد نفس الإجابات على الانترنت دون أي مساعدة ، كنت reasearching xml غير صالح subsicription رد من التعريف.

وجدت مثال على msdn موقع الدعم التي كان ترتيب مختلف قليلا من التعليمات البرمجية.عندما حاولت ذلك أدركت المشكلة - لا تفتح كائن اتصال حتى بعد إنشاء كائن الأوامر و ذاكرة التخزين المؤقت التبعية الكائن.هنا هو أمر يجب أن تتبع جميع سيكون جيدا:

  1. تأكد من تمكين الإخطارات (SqlCahceDependencyAdmin) وتشغيل SqlDependency.نبدأ أولا
  2. إنشاء كائن اتصال
  3. إنشاء كائن الأوامر وتعيين نص الأمر نوع كائن اتصال (أي مزيج من منشئات إعداد خصائص أو باستخدام CreateCommand).
  4. إنشاء ذاكرة التخزين المؤقت sql التبعية كائن
  5. فتح كائن الاتصال
  6. تنفيذ الاستعلام
  7. إضافة عنصر إلى ذاكرة التخزين المؤقت باستخدام التبعية.

إذا كنت تتبع هذا النظام ، ومتابعة جميع المتطلبات الأخرى على select, لم يكن لديك أي مشاكل الأذونات هذا العمل!

أعتقد أن المسألة كيف .NET framework يدير الصدد ، على وجه التحديد ما يتم تعيين إعدادات.حاولت تجاوز هذا في أمر sql الاختبار لكن ذلك لم يفلح.هذه ليست سوى تخمين ما أعرفه هو تغيير النظام على الفور حل المشكلة.

كنت قادرا على قطعة معا من msdn الوظائف.

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

https://social.msdn.microsoft.com/Forums/en-US/cf3853f3-0ea1-41b9-987e-9922e5766066/changing-default-set-options-forced-by-net?forum=adodotnetdataproviders

ثم هذا المنصب كان من مستخدم الذين مثلي ، قد خفضت له رمز أبسط شكل.بلدي الأصلي رمز نمط مماثل له.

https://social.technet.microsoft.com/Forums/windows/en-US/5a29d49b-8c2c-4fe8-b8de-d632a3f60f68/subscriptions-always-invalid-usual-suspects-checked-no-joy?forum=sqlservicebroker

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

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/bc9ca094-a989-4403-82c6-7f608ed462ce/sql-server-not-creating-subscription-for-simple-select-query-when-using-sqlcachedependency?forum=sqlservicebroker

آمل أن يساعد هذا شخص آخر في قضية مماثلة.

نصائح أخرى

مجرد تخمين ، ولكن يمكن أن يكون بسبب SELECT البيان لا يكون ORDER BY الحدوث ؟

إذا كنت لا تحديد صريح يأمر ثم أنه من الممكن الاستعلام بإرجاع نتائج في كل مرة يتم تشغيله.ربما هذا هو سبب SqlCacheDependency كائن أعتقد أن النتائج قد تغيرت.

جرب إضافة ORDER BY شرط:

SELECT ID, Name, Flag, IsDefault
FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY @OrderBy DESC) AS Row,
        ID, Name, Flag, IsDefault
    FROM dbo.Languages
) AS results
WHERE Row BETWEEN ((@Page - 1) * @ItemsPerPage + 1) AND (@Page * @ItemsPerPage)
ORDER BY Row

أنا لست خبيرا في SqlCacheDependency ، في الواقع ، لقد وجدت هذا السؤال في حين تبحث عن إجابات القضايا بلدي مع ذلك!ومع ذلك, أعتقد أن سبب SqlCacheDependency لا يعمل لأن SQL يحتوي على متداخلة الاستعلام الفرعي.

نلقي نظرة على الوثائق التي تسرد ما يمكن/لا يمكن استخدامها في SQL: إنشاء استعلام عن الإعلام

"....البيان يجب أن لا تحتوي على الاستعلامات الفرعية, صلات خارجية أو ذاتية ينضم....."

كما أنني وجدت بعض القيم استكشاف الأخطاء وإصلاحها معلومات من رجل في Redgate هنا: باستخدام ورصد SQL 2005 استعلام إعلام الذي ساعدني في حل مشكلتي:باستخدام منشئ ملفات التعريف Sql تتبع QN الأحداث ويقترح كنت قادرا على الفور الاتصال بشكل غير صحيح استخدام مجموعة ARITHABORT قبالة' الخيار ، مما تسبب الإشعارات الخاصة بي إلى فشل.

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