PDA

View Full Version : تعیین نوع exception



ali_mnkt
یک شنبه 17 خرداد 1388, 14:02 عصر
سلام به دوستان عزیز

دوستان از کجا می شه exception مربوط به یه خطا رو فهمید مثلا فرض کنید یه آرایه داریم

و می خوایم خطای مربوط به دسترسی به سلولی خارج از رنج آرایه رو در یه catch قرار بدیم

خوب مینویسیم :


catch(index out of range ex)

{

}


خوب اگه برای خطا های دیگه بخوایم اون خطا رو به قسمت catch معرفی کنیم از کجا باید

بفهمیم که چی بنویسم . مثلا خطایی که در کد sqlcommand1.Execute nounequery

در هنگامی که ارتباط با پایگاه داده قطع شده باشه ؟

happy65_sh
یک شنبه 17 خرداد 1388, 14:28 عصر
منظورت اینه :


catch(Exception q)
{
MessageBox.Show("error:" + q.Message);
}

ali_mnkt
دوشنبه 18 خرداد 1388, 00:55 صبح
همون طور که می دونید برای یک قسمت می شه catch های زیادی قرار داد که بر حسب

اون خطا ها ی احتمالی پیغام های مربوط به اون خطا رو اعلام کنه . حالا درنظر بگیرید که من

برای یک کد مثلا sqlcommand1.execute noune query چند خطا رو در نظر بگیرم مثلا :

1- ارتباط با پایگاه برقرار نباشه

2- عملی که با این کد در پایگاه باید اجرا بشه مثلا در کلید اصلی با مشگل مواجه بشه

و غیره . . . که هر کدوم از اینا یک error هست که باید بررسی بشه. خوب حالا در نظر بگیرید

مثلا برای برقرار نشدن ارتباط با پایگاه یک catch بنویسم که پیغام مربوطه رو به کاربر بده

من می خوام بدونم عنوان این exception رو چی باید برای catch معرفی کنم تا وقتی

این خطا رخ داد مثلا پیغامی که خودم در قسمت catch مینویسم رو از طریق یه message box

نمایش بدم ؟

فکر کنم با این توضیحات متوجه مشگل من شده باشید.

adinochestva
دوشنبه 18 خرداد 1388, 01:15 صبح
فکر کنم می خواهید نوع های مختلفی از exception هارو handle کنید
فرم کلی به این صورت هست :



try
{
// Statement which can cause an exception.
}
catch(Type x)
{
// Statements for handling the exception
}
finally
{
//Any cleanup code
}
حالا اگر کدتون 3 نوع exception را می خواهید به طرق مختلف handle کنید به این صورت عمل می شود :



try
{
// Statement which can cause an exception.
}
catch(Type x1)
{
// Statements for handling the exception1
}
catch(Type x2)
{
// Statements for handling the exception2
}
catch(Type x3)
{
// Statements for handling the exception3
}
finally
{
//Any cleanup code
}
مثلا :


try
{
var div = 100/x;
Console.WriteLine("Not executed line");
}
catch(DivideByZeroException de)
{
Console.WriteLine("DivideByZeroException" );
}
catch(Exception ee)
{
Console.WriteLine("Exception" );
}
finally
{
Console.WriteLine("Finally Block");
}
که exception نوع DivideByZeroException را به صورت خاص و باقی exception ها را در یک بلاک handle می کند

Reza_Yarahmadi
دوشنبه 18 خرداد 1388, 12:07 عصر
تا جایی که میدونم بدست آوردن نام استثناها فقط تجربی است.
برای مثال شما باید عرض کنم معمولا exceptionهای ارتباط با بانک از دو نوع InvalidOperationException و SqlException هستند و برای هر استثنا یک کد وجود داره که با توجه به نوع استثنا و کد مربوطه میتونی پیغام مورد نظرت رو نمایش بدی.


catch (SqlException ex)
{
if(ex.ErrorCode==127)
...
...
...
else if(ex.ErrorCode==128)
...
...
...
}

adinochestva
دوشنبه 18 خرداد 1388, 12:13 عصر
Exception Hierarchy : http://msdn.microsoft.com/en-us/library/aa328368(VS.71).aspx

ali_mnkt
دوشنبه 18 خرداد 1388, 21:51 عصر
تا جایی که میدونم بدست آوردن نام استثناها فقط تجربی است.
برای مثال شما باید عرض کنم معمولا exceptionهای ارتباط با بانک از دو نوع InvalidOperationException و SqlException هستند و برای هر استثنا یک کد وجود داره که با توجه به نوع استثنا و کد مربوطه میتونی پیغام مورد نظرت رو نمایش بدی.


catch (SqlException ex)
{
if(ex.ErrorCode==127)
...
...
...
else if(ex.ErrorCode==128)
...
...
...
}


دوست عزیز من نیاز به دو تا از این کد ها دارم یکی نشخیص error ی که هنگام عدم ارتباط

با پایگاه داده رخ می ده ( مثلال خاموش بودن سرور یا hibernate بودن آن و ...)

ویکی هم error هایی که در اجرای query رخ می دهد ( مثلا بخواهیم یک سطر از جدول رو

بر حسب شماره کلید آن سطر update کنیم اما کلیدی با اون شماره در جدول نباشد و...)

حالا چطوری می شه کد این خطا ها رو بدست آورد فهمید ؟ آیا خود شما با این کد ها آشنایید؟

saeed-kh
دوشنبه 18 خرداد 1388, 22:01 عصر
من وقتی یه خطا رو نمیدونم که چه نوع استثنایی رخ میده ,اون خطا رو خودم ایجاد میکنم و تو توضیحات پنجره ای که واسه خطا باز میشه اسم استثنا نوشته شده...:چشمک::خجالت:

saeed-kh
دوشنبه 18 خرداد 1388, 22:02 عصر
همونطور که دوستمون گفتن واسه پیدا کردن خطاها که ممکنه چه خطاهایی رخ بده هم باید تجربی بهش برسی فکر میکنم و همچنین از رو مستندات برنامت اگه کامل باشه..

piroozman
دوشنبه 22 تیر 1388, 23:05 عصر
دوست عزیز من نیاز به دو تا از این کد ها دارم یکی نشخیص error ی که هنگام عدم ارتباط

با پایگاه داده رخ می ده ( مثلال خاموش بودن سرور یا hibernate بودن آن و ...)

ویکی هم error هایی که در اجرای query رخ می دهد ( مثلا بخواهیم یک سطر از جدول رو

بر حسب شماره کلید آن سطر update کنیم اما کلیدی با اون شماره در جدول نباشد و...)

حالا چطوری می شه کد این خطا ها رو بدست آورد فهمید ؟ آیا خود شما با این کد ها آشنایید؟

با استفاده از دستور زیر

catch (System.Data.SqlClient.SqlException ex)
{
MessageBox.Show(ex.Message + " " + ex.Number.ToString());
}
ابتدا پیغام و شمارخ خطای خود را (البته در خصوص خطاهای ناشی از اس کیو ال) پیدا کنید. حالا می توانید پیغام مناسب را به کاربر اعلام کنید.