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

سی شارپ کده

پنجشنبه 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 اعلام کردیم که در هر شرایطی از بسته بودن بانک اطمینان حاصل کند.


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

نظرات() 
Cialis 20 mg
دوشنبه 7 خرداد 1397 01:32 ب.ظ

Nicely put. Thank you.
acheter cialis kamagra venta cialis en espaa cialis sicuro in linea cialis lowest price free generic cialis we use it cialis online store precios cialis peru cialis cipla best buy trusted tabled cialis softabs cialis pills boards
Online viagra
چهارشنبه 5 اردیبهشت 1397 09:20 ب.ظ

You said it perfectly..
buy viagra online with a prescription where to get viagra prescription generic viagra uk where to buy sildenafil uk buy viagra online paypal blue pill cheap generic viagra online can u buy viagra online buy viagra usa online how to get viagra from doctor
Buy cialis
شنبه 18 فروردین 1397 10:23 ب.ظ

Appreciate it! Quite a lot of stuff!

tadalafil generic generic cialis tadalafil prezzo di cialis in bulgaria generic cialis review uk enter site natural cialis cialis from canada cialis vs viagra purchasing cialis on the internet only best offers 100mg cialis usa cialis online
Cialis generic
جمعه 3 فروردین 1397 12:50 ق.ظ

Incredible a good deal of valuable knowledge!
best generic drugs cialis tadalafil il cialis quanto costa cialis 200 dollar savings card cialis coupons printable the best choice cialis woman cialis daily new zealand buying cialis in colombia does cialis cause gout tadalafil
farm heroes super saga hack
جمعه 4 اسفند 1396 05:20 ب.ظ
یک بحث جالب ارزش نظر است. من معتقدم که شما باید بیشتر در مورد این موضوع منتشر کنید
ممکن است موضوع تابو نباشد اما معمولا مردم در مورد این موضوعات صحبت نمی کنند.
بعدی! خیلی ممنون
Do compression socks help with Achilles tendonitis?
پنجشنبه 16 شهریور 1396 04: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 05: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 02:51 ق.ظ
Very quickly this web site will be famous amid all blogging users, due to it's
fastidious articles
BHW
پنجشنبه 24 فروردین 1396 03: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!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر

آمار وبلاگ

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