تنفيذ SQL Server 2005 استعلام الإعلامات في تطبيقات Windows C#


الكاتب:


أحمد بالاجى MVP

إخلاء مسؤولية حلول محتوى المجتمع


لا تقدم شركة MICROSOFT و/أو موردوها المعينون أي إقرارات حول ملاءمة أو موثوقية أو دقة المعلومات والرسومات ذات الصلة الواردة في هذا المستند. يتم توفير كافة هذه المعلومات والرسومات ذات الصلة "كما هي" دون ضمان من أي نوع. MICROSOFT و/أو الموردون التابعون لها مسؤوليتهم عن كافة الضمانات والشروط فيما يتعلق بهذه المعلومات والرسومات ذات الصلة، بما في ذلك كافة الضمانات الضمنية وشروط القابلية للتسويق والملاءمة لغرض معين والبراعة، العنوان وعدم الانتهاك. الموافقة على وجه التحديد أنه في أي حال من MICROSOFT و/أو الموردون التابعون لها يتعرض لأية أضرار مباشرة، غير المباشرة، وعقابية، العرضية، خاصة، الأضرار أو أي خسائر من أي نوع بما في ذلك، دون حصر، التعويض عن فقدان الفائدة أو البيانات أو الأرباح، التي تنشأ عن أو بأي وسيلة اتصال بالاستخدام أو عدم القدرة على استخدام المعلومات والرسومات ذات الصلة الواردة في هذه الوثيقة ، سواء بناء على العقد، المسؤولية التقصيرية، والإهمال، المسؤولية أو خلاف ذلك، تم إخطار حتى إذا كان MICROSOFT أو أي من مورديها بإمكانية حدوث الأضرار.

ملخص


توضح هذه المقالة كيفية تنفيذ SQL SERVER 2005 استعلام خدمة الإعلام في تطبيق windows C#. يعمل نموذج التعليمة البرمجية الموجود في هذه المقالة باستخدام Visual Studio 2005 و SQL Server 2005 إدارة Studio.

الأعراض


مقدمة

هو استعلام إعلام ميزة مضمنة في Microsoft SQL Server 2005 التي تسمح للتطبيقات يتم إعلامك عند تغيير البيانات. ويستخدم أساسا لتطبيقات تخزين ذاكرة التخزين المؤقتة لبيانات من قاعدة بيانات والحصول على التحديث وإعلام في كل مرة تطبيق العميل تغييرات البيانات في قاعدة البيانات.

المطورون في ASP.NET 2.0 بالفعل على دراية باستخدام فئات SqlCacheDependency في تطبيقات الويب الخاصة بها إلى مخزن بيانات SQL. تعالج هذه المادة تنفيذ رفيعة المستوى التي تقدمها الفئة SqlDependency في System.Data.SqlClient Namespace. يوفر وظيفة إعلام بسيطة وأنيقة بين تطبيقات windows وخادم SQL، مما يتيح لك استخدام تبعية للكشف عن التغييرات في الملقم. ترفع كفاءة القدرة إعلامات SQL Server 2005 على تطبيقات العميل الموثوق استخدام ADO.NET.

يسمح SQL Server 2005 ADO.NET Windows لإرسال أمر إلى ملقم SQL وطلب أن يتم إنشاء إعلام إذا كان تنفيذ نفس الأمر SQL ستنتج مجموعات نتائج مختلفة عن تلك البداية استرداد التطبيقات. تدعمه استعلام إعلام حدث وسيط خدمة قاعدة البيانات والآليات في قائمة انتظار.

السبب


اتباع نهج تدريجي في تنفيذ "استعلام الإعلامات" كامل عملية طلب الاستلام عملية الإعلام بين تطبيق عميل windows و SQL Server 2005 يتم في خمس خطوات صغيرة كما يلي:

1 يجب تكوين) قاعدة البيانات قيد البحث لتمكين خدمات إعلام الاستعلام.

لأسباب تتعلق بالأمان، لا تملك قواعد بيانات SQL Server 2005 Service Broker تمكينها بشكل افتراضي. لتمكين إعلامات استعلام لقاعدة البيانات في SQL SERVER 2005 إدارة الاستوديو، إطار الاستعلام، بتشغيل الأمر التالي:

تغيير قاعدة بيانات مجموعة ENABLE_BROKER؛

في هذه المقالة، أنا يستخدم قاعدة بيانات تسمى أدفتدب

تغيير قاعدة البيانات أدفتدب مجموعة ENABLE_BROKER؛

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



منطقي خاص EnoughPermission()
{
        
بيرم سقلكلينتبيرميشن = SqlClientPermission.System.Security.Permissions.PermissionState.Unrestricted جديدة)؛
حاول
   {
أذونات. Demand()؛
إرجاع "صحيح"؛
   } 
catch (System.Exception)
   {
إرجاع false؛
   }
}

3) استخدام كائن SqlCommand تنفيذ عبارة SELECT صالح مع كائن إعلام المرتبطة بها-SqlDependency.


كائن SqlDependency استعلام الإعلامات API يوفر كائن SqlDependency لمعالجة الإخطارات. عند استخدام SqlDependency، معرفة مسبقاً Service Broker الكائنات، مثل قائمة انتظار رسائل الإعلام. فإنه يقوم تلقائياً بتشغيل مؤشر ترابط عامل لمعالجة الإعلامات عند ترحيلها إلى قائمة الانتظار؛ أنه أيضا بتوزيع الرسالة Service Broker، كشف المعلومات كبيانات وسيطة الحدث. يجب تهيئة SqlDependency عن طريق استدعاء الأسلوب ابدأ بإنشاء تبعية لقاعدة البيانات. وهذا أسلوب ثابت بحاجة إلى استدعاء مرة واحدة فقط أثناء تهيئة التطبيق لكل اتصال قاعدة البيانات المطلوبة. يجب استدعاء الأسلوب Stop في إنهاء التطبيق لكل اتصال التبعية التي جرت.

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


button1_Click باطلة خاصة (الكائن المرسل، EventArgs e)
        {

إزالة أي اتصال التبعية الموجودة، ثم إنشاء واحدة جديدة.
كونستر = "مصدر البيانات = localhost؛ الأمان المتكامل = SSPI؛ النشرة المصورة الأولية = أدفتدب؛"؛
سلسلة سقل = "حدد * من أدفت"؛

SqlDependency.Stop(connstr)؛
SqlDependency.Start(connstr)؛
إذا (اتصال = = فارغة)
اتصال = SqlConnection(connstr) جديدة؛
إذا (الأمر = = فارغة)
الأمر = SqlCommand الجديد (سقل، اتصال)؛
إذا كان (ميداتاسيت = = فارغة)
ميداتاسيت = مجموعة البيانات () الجديدة؛
GetAdvtData()؛
        }

GetAdvtData() دالة مساعدة تقوم بإنشاء مثيل كائن الأمر، وربطها بكائن SqlDependency. لاحظ أن الكائن SqlDependency حدث OnChange إعلام العميل التي تم تنفيذ التغييرات في قاعدة البيانات و dependency_OnChange معالج الأحداث بالعناية باستلام جزء من الإخطار.

GetAdvtData() باطلة خاصة
        {
myDataSet.Clear()؛
تأكد من لم يكن كائن الأمر كائن إعلام.
الأمر. إعلام = فارغة؛
إنشاء وربط كائن SqlDependency لكائن الأمر.
تبعية SqlDependency = SqlDependency(command) جديدة؛
تبعية. + = OnChange OnChangeEventHandler(dependency_OnChange) جديدة؛

استخدام (محول SqlDataAdapter = SqlDataAdapter(command)) الجديدة
            {
محول. تعبئة (ميداتاسيت، "أدفت")؛
dataGridView1.DataSource = ميداتاسيت؛
dataGridView1.DataMember = "أدفت"؛
            }
        }

4) توفر تعليمات برمجية لمعالجة الإخطار عندما وإذا كان يجري رصد البيانات التغييرات.

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

تفويض UIDelegate() باطلة؛
dependency_OnChange باطلة خاصة (الكائن المرسل، سقلنوتيفيكاتيونيفينتارجس ه)
        {
أويديل أويديليجاتي = UIDelegate(RefreshData) جديدة؛
هذا. استدعاء (أويديل، خالية)؛

إزالة المعالج كما يتم استخدامه لإشعار واحد.
تبعية SqlDependency = المرسل (SqlDependency)؛
            dependency.OnChange -= dependency_OnChange;
        }
RefreshData() باطلة خاصة
        {
حيث يتم تنفيذ التعليمات البرمجية في مؤشر ترابط UI، أنها آمنة لتحديث واجهة المستخدم.

label1. النص = "قاعدة البيانات قد بعض التغييرات وتطبيقها في الشبكة"؛

إعادة تحميل مجموعة البيانات مرتبط بالشبكة.
GetAdvtData()؛
        }

5) إيقاف خدمات الإعلام SqlDependency أثناء إنهاء التطبيق. في الحدث form_closing، يمكنك تضمين التعليمات البرمجية لإيقاف خدمة مستمع الإعلام سقلديبينينسي.


Form1_FormClosing باطلة خاصة (الكائن المرسل، فورمكلوسينجيفينتارجس ه)
        {
SqlDependency.Stop(connstr)؛
إذا (اتصال! = فارغة)
اتصال. Close ()؛
        }

وفيما يلي التعريفات المستخدمة في هذا البرنامج.

statusMessage سلسلة ثابتة خاصة؛
ميداتاسيت DataSet الخاصة = فارغة؛
اتصال خاص SqlConnection = فارغة؛
الأمر SqlCommand الخاصة = فارغة؛
كونستر السلسلة الخاصة؛



الحل


اختبار التطبيق
تشغيل تطبيق C# Windows قمت بإنشائه اتباع الخطوات المذكورة أعلاه. عندما يظهر النموذج، انقر فوق الزر ثم لاحظ أن يتم ملء عنصر التحكم datagridview الخاص بك.

الآن، افتح إطار الاستعلام من studio إدارة ملقم SQL، وإدراج صفوف أو تحديث الأعمدة في الجدول المعنية. عند التبديل إلى جهاز C# تشغيل التطبيق، يمكن رؤية التغييرات التي تظهر في عرض datagrid.


مزيد من المعلومات


ملخص
 
توفر "خدمات SQL Server 2005 السمسرة" جنبا إلى جنب مع كائنات ADO.NET استعلام إعلام وسيلة فعالة لإعلام التغييرات في قاعدة البيانات في تطبيقات المستخدم. يمكن الحصول على مزيد من التفاصيل على الموقع التالي: