تبلیغات
سی شارپ کده - نحوه کنترل خطاها و استثناها

سی شارپ کده

پنجشنبه 24 شهریور 1390

نحوه کنترل خطاها و استثناها

نویسنده: حمیدرضا مهدوی پناه   طبقه بندی: نکته های آموزشی، 

در برنامه نویسی تابع گرا یا شی گرا احتمال نوشتن برنامه هایی که در آن خطا رخ دهد خیلی زیاد است، و حتمال اینکه سیستم عامل نتواند مشکلی برای حل این خطا پیدا کند زیادتر است. پس باید در برنامه نوشتم حد الامکان تمام خطاهای احتمالی را شناسایی کرده و برای آنها پیغام مناسبی به کاربر نشان داد. برای این کار در سی شارپ دستوراتی (blocks)وجود دارد که آنها را تشریح می کنیم.

try

{

 }

catch (Exception ex)

{

}

finally

{

}

در بلاک try باید کد برنامه یا تابع را بنویسیم. اگر احیانا در این برنامه خطایی وجود داشته باشد، اجرای برنامه به قسمت catch می رود و در آنجا با توجه به کدهایی که برای تشخیص خطا می نویسیم، خطا کنترل شود که هیچ وگرنه در هر صورت برنامه به قسمت finally رفته و کدهای آنجا را اجرا می کند.

برای مثال: بخواهیم یک فایل در یک مسیر خاص ایجاد کنیم.

private void Button1_Click(object sender, System.EventArgs e)

{

         System.IO.File.Create("c:\\test2.txt");

}

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

try

{

     System.IO.File.Create("c:\\test2.txt");

}

catch

{

}

در این حالت اگر چندین بار دکمه فشار داده شود هیچ عملی صورت نمی گیرد، چوت در بلاک catch هیچ دستوری وجود ندارد.

به مثالی دیگر توجه کنید:

می خواهیم به یک بانک در sql متصل شویم و یک رکورد را درج کنیم.

private void Button1_Click(object sender, EventArgs e)

{

SqlConnection Connection = new SqlConnection("server=localhost;Integrated Security=False;Initial Catalog= MyDataBase;");

SqlCommand command =new SqlCommand ("insert into Tbl1(T_Id)values(100)", Connection);

Connection.Open();

command.ExecuteNonQuery();

Connection.Close();

}

اگر تحت هر شرایطی در هنگام درج دستور مشکلی پیش بیاید، یا مثلا دو بار این رکورد درج شود که کلید اصلی باشد و پیغام خطا صادر شود. برنامه متوقف می شود و کنترل به سیستم عامل بر می گردد. و چون قبل از اجرای دستور، بانک را با دستور Connection.Open() باز کردیم. بانک همچنان باز می ماند، چون دستور آخری اجرا نمی گردد. و در دفعات بعد نمی توانیم به بانک دسترسی داشته باشیم چون همچنان در دسترس قرار می گیرد.

برای رفع این مشکل کد را به اینصورت اصلاح می کنیم.

SqlConnection Connection = new SqlConnection("server=localhost;Integrated Security=False;Initial Catalog= MyDataBase;");

try

{

SqlCommand command = new SqlCommand("insert into Tbl1(T_Id)values(100)", Connection);

Connection.Open();

command.ExecuteNonQuery();

Connection.Close();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

}

finally

{

Connection.Close();

}

در قسمت catch نوشتیم که هر باری که خطایی رخ داد پیغام آن خطا را از سیستم عامل گرفته و چاپ کند. و در قسمت finally اعلام کردیم که در هر شرایطی از بسته بودن بانک اطمینان حاصل کند.


منبع : وبلاگ آموزش نکات کاربردی زبان سی شارپ

نظرات() 
Do compression socks help with Achilles tendonitis?
پنجشنبه 16 شهریور 1396 03:32 ق.ظ
Hi Dear, are you in fact visiting this web page on a regular basis, if so then you will
definitely obtain good experience.
manicure
سه شنبه 5 اردیبهشت 1396 04:54 ب.ظ
I'm impressed, I have to admit. Seldom do I encounter a blog that's equally educative and
engaging, and let me tell you, you've hit the nail on the head.
The issue is something that too few people are speaking intelligently about.

I'm very happy I found this during my hunt for something
concerning this.
manicure
یکشنبه 3 اردیبهشت 1396 01:51 ق.ظ
Very quickly this web site will be famous amid all blogging users, due to it's
fastidious articles
BHW
پنجشنبه 24 فروردین 1396 02:57 ب.ظ
You really make it appear really easy together with your presentation but I to find this matter
to be actually something which I believe I might never understand.
It sort of feels too complicated and extremely broad for me.

I'm taking a look forward to your next put up, I'll attempt to get the hold of it!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر

آمار وبلاگ

  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :