الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تضمن أن SQL Server Express يعمل قبل بدء تطبيقك

بدأه محمد سامر أبو سلو في 22 أبريل 2006 · 12 رد · 2,559 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أحيانا تكون الخدمة الخاصة بـ SQL Server Express متوقفة لسبب ما رغم أن الإعدادات الافتراضية لتشغيلها هي Automatic وعندها لن يعمل البرنامج الخاص بك إذا كان يستخدم قاعدة بيانات مرتبطة به وقد تظهر لك رسالة شبيهة بالتالي

An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Shared Memory Provider, error: 40 - Could not open a connection to SQL Server)

وهذه الرسالة ممكن أن يكون سببها أيضا خطأ في إعدادات Local and remote connection الخاصة بـ SQL Server وفي هذه الحالة يمكن أن تحل المشكلة بضبط الإعدادات الصحيحة

ولنتأكد أن الخدمة ليست متوقفة يمكن عمل الطريقة التالية لمحاولة بدء الخدمة عند تشغيل برنامجنا

- افتح خصائص المشروع الخاص بك ومن صفحة Application اضغط زر View application events

- في بداية الملف ApplicationEvents.vb الذي أنشئ بالخطوة السابقة اكتب الكود التالي بعد إضافة Reference لـ System.ServiceProcess في المشروع

Imports System.ServiceProcess

- انشئ اجراء لمعالجة الحدث Startup الخاص بـ MyApplication ثم في إجراء الحدث اكتب الكود التالي

            Try
                ' If SQL server Express service not running try to run it first
                Dim controller As New System.ServiceProcess.ServiceController("MSSQL$SQLEXPRESS")
                If controller.Status <> ServiceControllerStatus.Running And _
                  controller.Status <> ServiceControllerStatus.StartPending Then

                    controller.Start()
                End If
                controller.WaitForStatus(ServiceControllerStatus.Running, New TimeSpan(0, 1, 0))
            Catch ex As Exception
                System.Media.SystemSounds.Asterisk.Play()
                MsgBox(ex.Message, MsgBoxStyle.Critical)
            End Try

الذي يقوم بإنشاء مرجع للخدمة الخاصة بـ SQL Server ثم يتأكد من حالتها ويحاول بدءها إن لم تكن تعمل

وشرح الكود

انشاء متحكم للخدمة اعتمادا على اسمها

                Dim controller As New System.ServiceProcess.ServiceController("MSSQL$SQLEXPRESS")

التأكد من حالة الخدمة وبدءها بالاجراء Start كما يمكن إيقافها أيضا بالاجراء Stop

                If controller.Status <> ServiceControllerStatus.Running And _
                  controller.Status <> ServiceControllerStatus.StartPending Then

                    controller.Start()
                End If

الانتظار حتى تصبح الخدمة في الحالة المطلوبة مع وضع فترة Timeout لمدة دقيقة واحدة والتي تطلق استثناء Exception في حالة انقضاء المدة المحددة دون وصول الخدمة للحالة المطلوبة

                controller.WaitForStatus(ServiceControllerStatus.Running, New TimeSpan(0, 1, 0))

- كما يمكن الاستفادة من الكود السابق للتحكم بأي خدمة من خدمات ويندوز من داخل برنامجك وبنفس الطريقة

- للمعلومات حول أحداث التطبيق Application Events والتعامل معها يوجد موضوع خاص في المنتدى على الرابط

تم تعديل هذه المشاركة بواسطة samerselo في 22 أبريل 2006 في 01:40

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

وفي المرفقات الملف التنفيذي لبرنامج مكتوب على VB2005 كنت كتبته لمراقبة الخدمة المذكورة وقت التجريب على الموضوع المذكور وأي واحد إذا فهم المشاركة الموضوعة هنا بيقدر بسهولة عمل برنامج مشابه

SQL_Express_Status.zip

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

السلام عليكم

شكراً لك اخ سامر معلومة قيمة فعلاً

اللهم وفقنا لما تحب وترضى

photo-25148.png

Microsoft Certified Technology Specialists in Microsoft SQL Server 2005

#4

السلام عليكم ورحمه الله وبركاته ،

موضوع ممتاز أخي العزيز سامر، في الحقيقة نحن بحاجة الى هذا الكود الموجود في الموضوع في كل برمجياتنا المعتمدة على هذا النوع من قواعد البيانات ، لضمان عمل البرنامج ،

ولكن لدي سؤال صغير :

" MSSQL$SQLEXPRESS " كيف كتبت هذه العبارة بين علاميت التنصيص ؟

اقصد بسؤالي هذا هو ان اسم الـ Process للنسخه Express هي SQLExpress ، واظن انها للنسخه تجارية MSSQL ، فعلى اي اساس كتبت اسم البروسيس في الكود بهذه الطريقة ؟ هل بهذه الطريقة نتحكم بكلا العمليتين Process ؟

#5

نعم هذا اسم الـ Process وقد حصلت عليه من لوحة التحكم

وإذا أردت تسهيل الأمر عليك يمكنك استخدام Component خاص بالـ Process موجود ضمن الأدوات الأساسية التي تأتي مع VB2005 ولكن هنا عرضت طريقة الكود لفهم تفاصيل العملية ويمكنك التعامل مع أي Windows Service بهذه الطريقة

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

رائع وبالتالي

فانا يمكنني معرفة اسماء الخدمات الموجودة على الجهاز من هذا الكود

Sub ListServices()
	Dim ListBox1 As ListBox

	Dim services() As System.ServiceProcess.ServiceController
	Dim i As Integer
	services = System.ServiceProcess.ServiceController.GetServices()
	ListBox1.Items.Clear()
	For i = 0 To services.Length - 1
		ListBox1.Items.Add(services(i).ServiceName)
	Next
End Sub
#7

الموضوع رائع وهام جزاك الله خيرا اخي

ولكن أحيانا يقوم العميل بغلق SQL بنفسه -وهو لا يعلم غالبا مهو هذا البرنامج الذي بغلقه - نتيجة ظهور ايقونة له بجوار الساعة فهل يمكن أخفاء هذه الأيقونة وإبقاء البرنامج يعمل

لا تَقُولن لِشيءٍ ذَا نَاقِصٌ ... وَلَكن أَعمل وَقُل ذَا أكملُ

#8

الأخ د.كمال إضافة حلوة مشكور

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#9

الأخ vbdb2005

أنا بالأساس لم أفهم لماذا تريد توزيع هذه الأداة مع برنامجك وقد قمت بكتابتها لأغراض التدقيق عندما واجهت مشكلة مع الـ SQL Server

ثم أنه لديك مبدأ العمل يمكنك فعل ماتريد مثلا أحد برامجي وضعت كود التحقق والتشغيل الموجود هنا في الحدث Startup في Application Events وذلك كي لا أبقي هذه الأداة تعمل طوال الوقت كما بتمكنك من برمجة NotifyIcon يمكنك عمل التعديل الذي تريده

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 22 يناير 2007 في 00:57

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#10

أشكرك أخي محمد سامر أبو سلو على الأهتمام

أنا لا أريد أرفاق أدوات مع البرنامج وإنما فهمت انه لتعمل قاعدة بيانات SQL على اي جهاز لابد من تشغيل برنامج Microsoft SQL Server Desktop Engine ولا يوجد مشكلة في ذلك فيمكن أن يرفق مع البرنامج مثل الفريم وورك والمشكلة اننا نتوقع كل شيء من العميل - ولإسف سيكون دائما على حق - ومما نتوقعة هو ان يقوم باغلاق البرنامج المرفق او العبث في خصائصه عن طريق الأيقونة التي تظهر بجوار الساعة ، ما فهمته من شرحك الرائع أنك تقوم بحل هذه المشكلة وما اردته أن امنع حدوثها من قبل المستخدم - أو على الأقل أقلل من حدوثها- وذلك بإلغاء هذه لأيقونة ولكي لا اتجهة بشرحك في اتجاة أخر واحتراما لقواعد المشاركة بعدم تعدد الأسئلة في نفس الموضوع وضعت السؤال في موضوع جديد وهذا هو رابطة أنقر هنا

لا تَقُولن لِشيءٍ ذَا نَاقِصٌ ... وَلَكن أَعمل وَقُل ذَا أكملُ

#11

بالنسبة لـ SQL Server فالخدمة تعمل تلقائيا - الإعدادات الإفتراضية - وحتى يستطيع المستخدم العبث بهذه الإعدادات - الشئ المتخوف منه حضرتك - يجب عليه الوصول إلى التحكم بـ Services من لوحة التحكم وبالأساس لاتظهر له أيقونة بجانب الساعة

الأداة المرفقة هنا من تطويري وليست من تطوير مايكروسوفت

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#12

أشكرك على التوضيح أخي محمد سامر أبو سلو

لا تَقُولن لِشيءٍ ذَا نَاقِصٌ ... وَلَكن أَعمل وَقُل ذَا أكملُ

#13

مرفق الكود المصدري الكامل للأداة المذكورة بعد تطويره لنسخة الـ 2008 وإضافة بعض التعديلات حتى يتوافق مع UAC الخاص بويندوز فيستا مع النسخة التنفيذية للإصدارة المطورة

SQLExpressStatus_2008_Code.rar

SQL_Express_Status_EXE.rar

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 25 مايو 2008 في 23:22

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

مواضيع مشابهة