PDA

View Full Version : سوال: پیغام خطا حین متصل نبودن بانک



narese
سه شنبه 30 تیر 1394, 21:21 عصر
سلام دوستان نرم افزاری دارم که بانک آن در کامپیوتر دیگری است.مشکلی که دارم این است که گاه کامپیوتر سرور قطع یا خاموش است که در این صورت بعد از اجرای نرم افزار با تعداد زیادی خطا مواجه می شوم.حالا کدی می خواستم که در صورتی که بانک متصل نبود (سرور قطع یا خاموش بود) پیغامی مبنی بر قطع بودن ارتباط با بانک بدهد.

pbm_soy
چهارشنبه 31 تیر 1394, 02:57 صبح
خطاهای در حین اجرا را معمولا به دو روش میتوانید کنترل کنید تا خطا نده و یا پیامها انگلیسی سیستم ظاهر نشه و از برنامه خارج نشه
* با گذاشتن شرط و کنترل کردن اینکه شرایط مورد نظرت برقرار است یا خیر ؟ در این مورد خاص میتوانی با پینگ کردن به سرور چک کنی که سرور روشن است و متصل به شبکه است یا خیر اگر متصل نبود خطای مناسب نمایش دهی و ادامه کار را قطع کنی
* روش استانداردتر استفاده از بلوکهای try/catch است که کدی که میخواهی اجرا کنی و احتما میدی که خطا در آن وجود داشته باشد را در بلوک try قرار میدهی و بعداز آن بلوک یک یا چند بلوک catchمیتوانی بنویسی که اگر خطای در بلوک try رخ داد بسته به نوع خطا یکی از بلوکهای catchپیش بینی شده اجرا خواهند شد و پیام مناسب را در آنجا نمایش دهی و کارهایی که در صورت پیش آمدن این خطا میخواهی انجام دهی را مینویسید!

pbm_soy
چهارشنبه 31 تیر 1394, 03:09 صبح
برای روشن شدن قضیه به مثال زیر توجه کنید که خطائی ندارد و اجرا میشود 3 تا تکست باکس وجود دارد که قرار است اولی را بر دومی تقسیم کنیم و نتیجه را در تکست باکس سوم نمایش دهیم


int a, b, c;

a = Convert.ToInt16(textBox1.Text);
b = Convert.ToInt16(textBox2.Text);
c = a / b;
textBox3.Text = c.ToString();

این کد بدون مشکل اجرا خواهد شد اگر کاربر عدد وارد کند و یا اینکه تکستها را خالی نگذارد و یا اینکه عدد دوم را صفر وارد نکندبرای جلوگیری از این خطاهای در حین جرا که کاربر مسبب آنهاست به دو روش زیر میتوان اقدام کرد

روش اول که با گذاشتن شرطهای مختلف انجام میشود

int a, b, c;
//====== بررسی خالی نبودن تکست باکسها
if (textBox1.Text.Trim().Length == 0 || string.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("تکست باکس اول خالی است");
textBox1.Focus();
return;
}

if (textBox2.Text.Trim().Length == 0 || string.IsNullOrEmpty(textBox2.Text))
{
MessageBox.Show("تکست باکس دوم خالی است");
textBox2.Focus();
return;
}
//========= بررسی عددی بودن تکست باکسها
int myOutInt;
if (int.TryParse(textBox1.Text, out myOutInt) == false)
{
MessageBox.Show("در تکست اول عدد وارد کنید");
textBox1.Focus();
return;
}

if (int.TryParse(textBox2.Text, out myOutInt) == false)
{
MessageBox.Show("در تکست دوم عدد وارد کنید");
textBox2.Focus();
return;
}

//========== تبدیل تکستها به عدد
a = Convert.ToInt16(textBox1.Text);
b = Convert.ToInt16(textBox2.Text);

//========== بررسی صفر نبودن عدد دوم
if (b == 0)
{
MessageBox.Show("عدد دوم صفر میباشد و امکان تقسیم برصفر وجود ندارد");
textBox2.Focus();
return;
}

//========= انجام محاسبه
c = a / b;
textBox3.Text = c.ToString();

pbm_soy
چهارشنبه 31 تیر 1394, 03:12 صبح
فراموش کردم که روش دوم را بنویسم اینم روش دوم که از بلوک try/catch استفاده میکند و تقریبا همه زبانهای برنامه نویسی همچین امکانی را دارند


int a, b, c;
try
{
a = Convert.ToInt16(textBox1.Text);
b = Convert.ToInt16(textBox2.Text);
c = a / b;
textBox3.Text = c.ToString();
}
catch (FormatException ex)
{
MessageBox.Show("در تکست باکسها عدد وارد کنید");
textBox1.Focus();
}
catch (DivideByZeroException ex)
{
MessageBox.Show("امکان تقسیم برصفر وجود ندارد");
textBox2.Focus();
}
catch (Exception ex)
{
MessageBox.Show("خطای پیش بینی نشده");
}



اگر دقت کنید catch آخر برای تمام خطاها است یعنی اگر خطای خاصی را پیش بینی نکرده باشید و یا نوع و نام خطا را نمیدانید catch آخر آنها را در نظر میگیرد یعنی هر نوع خطایی پیش بیاید این بلوک آخر اجرا میشود البته به شرطی که آن خطا با هیچ یک از خطاهای نوشته شده در بالا تطابق نداشته باشد

amp_1356
چهارشنبه 31 تیر 1394, 12:57 عصر
سلام این یه برنامه هست که متصل بودن به شبکه محلی (LAN) یا اینترنت یا قطع بودن شبکه رو مشخص می کنه
می تونید از این برنامه الگو بگیرید.
موفق باشید


133454