PDA

View Full Version : سوال: مشکل در اجرای برنامه در حالت Startup و اتصال به دیتابیس



morteza271
پنج شنبه 02 مرداد 1393, 00:22 صبح
سلام.

دوستان من یه برنامه کوچیک دارم که به بانک sql وصل میشه. همون اول اجرا شدن برنامه اتصال به بانک رو چک میکنه اگه وصل شد که هیچی ولی اگه نشه پیام خطا میده و یه فرم تنظیمات به کاربر نمایش داده میشه.

از طرفی هم این برنامه حتما باید به صورت Stratup به همراه ویندوز اجرا بشه.(یعنی تا ویندوز بالا میاد این برنامه هم اجرا بشه)
که تا اینجا مشکلی نیست و با یه کد برنامه رو توی Startup ویندوز گذاشتم.

ولی وقتی به این صورت(به همراه ویندوز) اجرا میشه همون خطای عدم اتصال به بانک رو نشون میده.
احساس میکنم دلیلش اینه که وقتی برنامه من اجرا میشه هنوز سرویس sql اجرا نشده و به همین خاطر نمیتونه به بانک وصل شه.
چرا که بعد از 1 دقیقه که ویندوز بالا میاد و میرم دستی برنامه رو اجرا میکنم بدون هیچ مشکلی به بانک وصل میشه و بدون خطا اجرا میشه.

حالا برای اینکه این مشکل برطرف بشه باید چیکار کنم؟؟؟

با تشکر پیشاپیش و آرزوی قبول طاعات و عبادات شما دوستان عزیز...
التماس دعا.

plus
پنج شنبه 02 مرداد 1393, 00:50 صبح
از AddReference، آیتم System.ServiceProcess رو اضافه کنید. و بعد:


using System.ServiceProcess;
..
..using (ServiceController serviceController = new ServiceController("MSSQL$SQLEXPRESS")) {
try {
serviceController.WaitForStatus(ServiceControllerS tatus.Running, new TimeSpan(0, 0, 120));
}
catch (System.ServiceProcess.TimeoutException e) {
MessageBox.Show("SQL Server Service is not running...");
return;
}
}
// Do SQL Work here

با قرار داد این کد قبل از ایجاد ارتباط با SQL میتونید تا 120 ثانیه منتظر اجرای سرویس بمونید و اگه بعد از این مدت اجرا نشد پیغام خطا بدین و ...

morteza271
پنج شنبه 02 مرداد 1393, 03:18 صبح
ممنونم دوست عزیز درست شد.

البته من روی سیستم خودم بایستی به جای MSSQL$SQLEXPRESS عبارت MSSQLSERVER رو بزنم تا جواب بده.

حالا یه سوال :
روی سیستم مشتری از چی باید استفاده کنم؟

plus
پنج شنبه 02 مرداد 1393, 04:18 صبح
ممنونم دوست عزیز درست شد.

البته من روی سیستم خودم بایستی به جای MSSQL$SQLEXPRESS عبارت MSSQLSERVER رو بزنم تا جواب بده.

حالا یه سوال :
روی سیستم مشتری از چی باید استفاده کنم؟
بله خوب شما باید اسم سرویس، زمان Timeout و ... رو بر اساس نیاز خودتون سفارشی کنید.
اگه منظورتون از چی استفاده کردن، نوع DBMS هست که داستان مفصلیه و بسته به نوع پروژه و ... میتونه متفاوت باشه اما به صورت کلی میتونم بگم هرچی سبک تر باشه معمولا بهتر هست مثلا من بین MS SQL Server Standard و MS SQL Server Express اگه امکانش باشه، من دومی رو انتخاب میکنم (البته به صورت کلی میگم ولی برای پاسخ دقیق باید مورد رو بررسی کرد).

morteza271
جمعه 03 مرداد 1393, 02:48 صبح
ممنونم دوست عزیز.
کدی که دادین خیلی لازمش داشتم و کمک کرد ممنونم.

حالا یه سوال دیگه :
میخوام همون ابتدای اجرا شدن برنامه وضعیت اتصال به اینترنت رو هم بررسی کنم.
واسه این کار روشی مشابه بالا وجود داره یا نه؟

plus
جمعه 03 مرداد 1393, 14:47 عصر
فکر نمیکنم.میتونید یک سایت مثل Google رو Ping کنید ببینید جوابی دریافت میشه یا نه.

morteza271
یک شنبه 12 مرداد 1393, 23:27 عصر
مهندس من همون کد شما رو گذاشتم و درست شد.

ولی بعضی مواقع بازم پیش میاد که بعد از این بازم به دیتابیس نمیتونه وصل بشه و مطئنا چون سرویس sql اجرا نشده به بانک وصل نمیشه!
یه کاری کردم که زمان شروع این انتظار و زمان خروج از این انتظار رو بهم بده و چک کردم دیدم واقعا 2 دقیقه منتظر نبوده و نهایتا زمان انتظارش میشد 15 ثانیه!!!

یعنی بعضی مواقع حدود 15 ثانیه منتظر میمونه و همچنان سرویس sql اجرا نیست ولی با این وجود از انتظار خارج میشه و سعی میکنه به بانک وصل بشه و نمیتونه و خطا میده!!!

چرا اینطوری هستش؟ مشکل از کجاست؟

plus
یک شنبه 12 مرداد 1393, 23:42 عصر
نباید اینطور باشه.من به صورت دستی که سرویس MS SQL رو برای آزمایش، Stop و Start میکردم بلافاصله بعد از شروع سرویس از Wait خارج میشد.لزومی نداره 2 دقیقه حتما منتظر بمونه...شما میتونی از Component Services و یا با کد وضعیت سرویس SQL رو ببینی اونوقت میتونی مطمئن بشی که این کلاس کار خودش رو درست انجام میشه یا نه...در ضمن اگه چندتا Instance از MS SQL نصبه مطمئن باش که اسم سرویس مربوطه رو به کلاس دادی...