PDA

View Full Version : سوال: مدیریت استثنائات و نمایش پیام مکناسب با توجه به خطا رخ داده ...



ostovarit
پنج شنبه 01 مهر 1389, 13:31 عصر
من یک برنامه ارسال ایمیل نوشتم ...
چطور استثنائات رو مدیریت کنم و به ازای هر استثنا پیام مورد نظر رو به کاربر نمایش بدم ...
یعنی در بلاک catch با توجه به خطا رخ داده یک پیام مناسب نمایش بدم ...
یک خط کدم ممکنه چند استثنا مختلف داشته باشه برای همین باید نوع اون رو تشخیص بدم بعد پیام رو نمایش بدم ...

لطفا راهنمایی بفرمایید
باتشکر

cheshm6k
پنج شنبه 01 مهر 1389, 14:26 عصر
سلام.
نکته مهم همون تشخیص دادن نوع exeption هاست . باید بدونی مجموع دستوراتت چه exeptionهای میتونه داشته باشه بعد به اینصورت میتونی نسبت به نوعش، اقدام به نمایش پیغام مناسب کنید.


try
{
}
catch (StackOverflowException ex)
{
}
catch (SqlException ex)
{
}
catch (Exception ex)
{
}


هرچه تعداد بیشتر exeptionها رو پوشش بدی بازخورد بهتری میتونی به کاربر ارائه کنی . اگه نه با catch آخر یه پیغام کلی به کاربر بدید.
موفق باشید.

sayan
پنج شنبه 01 مهر 1389, 14:42 عصر
سلام
شما در قسمت Catch برای آن قسمت کد خطاهای زیادی رو مشخص میکنید که اگر این نوع خطا اتفاق افتاد یک پیغام مثلاً به کاربر نشان داده بشه
مثلاً یک دستور زیر
7 Exception تولید میکند




private void btnDelete_Click(object sender, EventArgs e)
{
try
{
System.IO.File.Create("c:\test");
}
catch (UnauthorizedAccessException e1)
{
MessageBox.Show ("شما مجوز ایجاد پوشه را ندارید");
}
catch (ArgumentException e2)
{
MessageBox.Show ("آدرسی دهی اشکال دارد");
}
catch (ArgumentNullException e3)
{
MessageBox.Show ("هیچ مسیری انتخاب نکرده اید");
}
catch (PathTooLongException e4)
{
MessageBox.Show ("نام پوشه خیلی طولانی است");
}
catch (DirectoryNotFoundException e5)
{
MessageBox.Show ("مسیری برای ایجاد پوشه وجود ندارد");

}
catch (IOException e6)
{
MessageBox.Show ("خطای ورودی خروجی");
}
catch (NotSupportedException e7)
{
MessageBox.Show("فرمت آدرس اشکال دارد");

}
}


و شما 7 تا Catch برای این یک خط دستور مینویسید و تعریف میکنید نسبت به هر خطا پیغام مناسب خودتون به کاربر نشان بده

csharpprogramer88
پنج شنبه 01 مهر 1389, 16:56 عصر
دوست عزيز سلام
اگر ممكنه يك كد بگذاريد يا يك مثال از پروژه خودتون بزنيد بهتر ميشه كمك كرد جوابي كه ميفرستم با فرض اينه كه شما از try , catvh چيزي نميدونيد


try
}

}
catch()
}

}
finally
}

{


دستوراتي كه ممكنه باعث بروز خطا بشه داخل بلوك try بنويسيد اگر دستورات داخل بلوك try بروز خطا كردند دستورات داخل catch اجرا ميشه و اگر بروز خطا كردند داخل داخل catch هيچوقت اجرا نميشه و اگر چه بروز خطا بكند يا نكند finally اجرا خواهد شد البته finally ميتواند باشد يا نباشد و من در باره اون هيچي نميدونم

شايد دوستان اگر بدونند شما دقيقا چي ميخواي بهتر كمك كنند .

میلاد قاضی پور
پنج شنبه 01 مهر 1389, 18:28 عصر
فکر کنم به غیز از نوع exception بقیه یعنی sqlexception و ... دارای پراپرتی ارور کد هستند . شما باید ابتدا متن استثنا رو خودتون ببینید . مثلا متن استثنا میگه که دیتابیس قبلا وجود دارد . حالا شما با استفاده از پراپرتی ارورکد کلاس sqlexception میتونید کد ارور رو در بیارید . حالا از این به بعد داخل بلاک کچ میتونید شرطی بنویسید که اگر کد ارور فلان بود (همونی که قبلا در آوردینش) این متن رو نشون بده "دیتابیس قبلا موجود است"

ostovarit
جمعه 02 مهر 1389, 20:09 عصر
از همه دوستانی که در بحث شرکت کردندن ممنونم مشکلم حل شد اما یک سوال دیگه برام پیش اومد ...
من تونستم خطا ها رو تفکیک کنم و با توجه به خطا پیام رو نمایش بدم ...
اما بعضی از کچ هام باز شامل چند نوع خطا میشه برای تفکیک اونها چه باید کنم ...؟ ( همشون ظاهران زیر مجموعه یک نوع استثنا هستن)
چطور کد خطا رو بدست بیارم که بتونم با توجه به کد پیام مورد نظرم رو نمایش بدم ؟

sayan
دوشنبه 05 مهر 1389, 09:31 صبح
اما بعضی از کچ هام باز شامل چند نوع خطا میشه برای تفکیک اونها چه باید کنم ...؟ ( همشون ظاهران زیر مجموعه یک نوع استثنا هستن)
چطور کد خطا رو بدست بیارم که بتونم با توجه به کد پیام مورد نظرم رو نمایش بدم ؟
میتونید یک نمونه نام ببرید.
تا اونجایی که من میدونم برای جلوگیری از هر خطایی Exception خاص آن وجود دارد و در حالت کلی هم خود شی Exception جوابگوی هر خطایی می باشد

ostovarit
دوشنبه 05 مهر 1389, 11:02 صبح
میتونید یک نمونه نام ببرید.
تا اونجایی که من میدونم برای جلوگیری از هر خطایی Exception خاص آن وجود دارد و در حالت کلی هم خود شی Exception جوابگوی هر خطایی می باشد

مثلا SmtpException ارور هایی که زیر مجموعش هستن عناوین زیادی دارند مثل TimeOut یا Field To Send .... مفهوم کلی اونها عدم ارسال ایمیل هست اما همه زیر مجموعه این استثنا هستند و به صورت جدا گونه نمیشه بررسی کرد! ... و من همه رو با یک پیغام خطا مجبورم به کاربر نمایش بدم ... و نتونستم تفکیک کنم

sayan
سه شنبه 06 مهر 1389, 23:19 عصر
سلام ببخشید که دیر جواب دادم
من Exception هایی رو که گفتید بررسی کردم و راه حلی که به نظرم میاد اینه که در قسمت Catch براساس محتوای خطای پیش آمده آن را مدیریت کرده و به کاربر نشان دهید.مثلاً



Catch (SmtpEception e )
{
if (e.Message.Contain("TimeOut"))
MessageBox.Show("زمان ارتباط با سرور تمام شده دوباره سعی کنید");
if (e.Message.Contain("Field To Send"))
MessageBox.Show("امکان ارسال اطلاعات وجود ندارد");
.
.
.

}


اینطوری میشه پیغام بهتری به کاربر نشون داد.

mmd2009
چهارشنبه 07 مهر 1389, 03:23 صبح
با سلام خدمت دوست عزیز خودم

این لینک دیدنش خالی از لطف نیست

(http://msdn.microsoft.com/en-us/library/ms173160%28v=VS.90%29.aspx)Exceptions and Exception Handling (C# Programming Guide) (http://msdn.microsoft.com/en-us/library/ms173160%28v=VS.90%29.aspx)