PDA

View Full Version : مدیریت خطاها در C#‎



mostafag
چهارشنبه 03 مرداد 1397, 12:59 عصر
سلام خدمت شما

ببینید من میدونم که مدیریت خطا توی سی شارپ به وسیله try catch صورت میگیره. میدونم که با این قطعه کد قشنگ میشه خطارو به کاربر نشون داد:



try {

کد مورد نظر
}

catch (Exception error)
{
MessageBox.Show("خطایی رخ داده است \r\n متن خطا: \r\n" + error.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}



میدونم که سی شارپ تعدادی Exception داره که میشه هر کدوم رو جدا جدا پیغام مجزا براش نشون داد. ولی اینا رو من متوجه نمیشم. مثلا توی زبان vb6 هر خطایی یه کد داشت و توی برنامه نویسی میگفتی مثلا اگه خطای کد 106 داد چه پیغامی نشون بده. حالا میخوام بدونم توی سی شارپ چطوری باید برا هر خطایی یه پیغام نشون داد؟ چون همش انگلیسیه و درست نمیتونم متوجه بشم چی به چیه.
مثلا خطای پیوست رو چطوری باید مجزا کنم؟

نمیدونم منظورمو درست رسوندم یا نه؟ میخوام خطاهام اونایی که حداقل خودم میدونم رو برای کاربر فارسی نمایش بدم تا کاربر متوجه بشه چیکار باید بکنه. ولی نمیدونم این خطای پیوستی مثلا توی کدوم Exception هستش.

خلاصه ممنون میشم راهنمایی بفرمایید

کامبیز اسدزاده
چهارشنبه 03 مرداد 1397, 13:23 عصر
سلام خدمت شما

ببینید من میدونم که مدیریت خطا توی سی شارپ به وسیله try catch صورت میگیره. میدونم که با این قطعه کد قشنگ میشه خطارو به کاربر نشون داد:



try {

کد مورد نظر
}

catch (Exception error)
{
MessageBox.Show("خطایی رخ داده است \r\n متن خطا: \r\n" + error.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}



میدونم که سی شارپ تعدادی Exception داره که میشه هر کدوم رو جدا جدا پیغام مجزا براش نشون داد. ولی اینا رو من متوجه نمیشم. مثلا توی زبان vb6 هر خطایی یه کد داشت و توی برنامه نویسی میگفتی مثلا اگه خطای کد 106 داد چه پیغامی نشون بده. حالا میخوام بدونم توی سی شارپ چطوری باید برا هر خطایی یه پیغام نشون داد؟ چون همش انگلیسیه و درست نمیتونم متوجه بشم چی به چیه.
مثلا خطای پیوست رو چطوری باید مجزا کنم؟

نمیدونم منظورمو درست رسوندم یا نه؟ میخوام خطاهام اونایی که حداقل خودم میدونم رو برای کاربر فارسی نمایش بدم تا کاربر متوجه بشه چیکار باید بکنه. ولی نمیدونم این خطای پیوستی مثلا توی کدوم Exception هستش.

خلاصه ممنون میشم راهنمایی بفرمایید

خب اینجا شما می‌تونید کُد مرتبط با هر خطار رو دریافت و سفارشی سازی کنید. کار سختی نیست‌:) مثلا کلاس SqlException خاصیت Number رو داره که کد خطایی که می‌خواین رو برمی‌گردونه شما کدش رو بگیر و سفارشی سازی کن.

mostafag
چهارشنبه 03 مرداد 1397, 13:50 عصر
ممنون که راهنمایی میکنید
منظورتون رو درست متوجه نشدم. میشه بگید کدش الان کجاست؟چطوری باید بنویسمش اصن؟ میشه بنویسیدش؟ خیلی ممنون ...

mostafag
چهارشنبه 03 مرداد 1397, 14:36 عصر
ببخشید من هر کار کردم که کد رو بدم نشد که نشد. مثلا این خطایی که من توی پست اول پیوست کردم کدش چیه؟؟ من از کجا بفهمم کده خطاها چیه؟ لیستی چیزی ازشون جایی نیست؟

danialafshari
چهارشنبه 03 مرداد 1397, 15:48 عصر
ببخشید من هر کار کردم که کد رو بدم نشد که نشد. مثلا این خطایی که من توی پست اول پیوست کردم کدش چیه؟؟ من از کجا بفهمم کده خطاها چیه؟ لیستی چیزی ازشون جایی نیست؟

با سلام
منظور آقای اسدزاده این هست که اگر شما میخواید شماره خطای Sql رو بدست بیارید به جای استفاده از کلاس Exception میتونید از کلاس SqlException استفاده کنید

try
{
//some code
}
catch (SqlException ex)
{
if (ex.Number == 53) MessageBox.Show("سرور یافت نشد، تنظیمات را بررسی کنید");
}

موفق باشید

mostafag
پنج شنبه 04 مرداد 1397, 13:03 عصر
خب دقیقا منم متوجه همین منظور شدم. این شماره هارو از کجا گیر بیارم؟؟ توی پیغامای خطایی که خودم باهاشون مواجه میشم شماره نداره. در ضمن من فقط برای sql منظورم نیست. کلا برا همه چیز منظورمه. اینا کلا شماره ای چیزی ندارن؟ الان این Sql شماره داره خیلی خوب شد. ولی خب عدداش رو از کجا گیر بیارم؟ لیستی چیزی توی نت هست یا مثلا شما میشناسین؟

مجددا ممنون از راهنماییتون ....

کامبیز اسدزاده
پنج شنبه 04 مرداد 1397, 13:46 عصر
خب دقیقا منم متوجه همین منظور شدم. این شماره هارو از کجا گیر بیارم؟؟ توی پیغامای خطایی که خودم باهاشون مواجه میشم شماره نداره. در ضمن من فقط برای sql منظورم نیست. کلا برا همه چیز منظورمه. اینا کلا شماره ای چیزی ندارن؟ الان این Sql شماره داره خیلی خوب شد. ولی خب عدداش رو از کجا گیر بیارم؟ لیستی چیزی توی نت هست یا مثلا شما میشناسین؟

مجددا ممنون از راهنماییتون ....

کدِ خطاها در قالب استانداردی هستن که از قبل مشخص شده. کافیه لیست این شماره‌ها رو همراه با توضیحاتش بررسی کنید. برای مثال جهت مدیریت خطاهای مرتبط با SQL Server این بخش (https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/cc645603(v=sql.105)) رو ببینید، شما می‌تونید بازه‌ی کُد خطاهارو مشاهده کنید که هرکدومشون توضیحات خودشون رو دارن برای خطاهای رایج تحت HRESULT واسه ErrorCode در کلاس ExternalException که در هِدِر Winerror.h قرار گرفتن هم این بخش (https://docs.microsoft.com/en-us/windows/desktop/SecCrypto/common-hresult-values) رو ببینید.