منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : شرح مثال عن (Try-Catch) أقتناص الاخطاء Catching Exceptions
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته 
#Catching_Exceptions




– من أكثر ألاشياء التي تزعج المبرمج هي توقف النظام عند العميل وضهور هذة الرسالة
على الرغم من أن المبرمج يقوم بعمل تست لوضائف النظام قبل تسليمه للعميل ولا تضهر هذة الرسالة عندة
ولكن تضهر هذة الرسالة عند العميل فقط والسبب في ذالك هو:-
– عدم توفر البرامج الملحقه المشغلة للنظام في جهاز العميل (مثلا جهاز العميل لا يوجد به sqlserver OR Access …).
– العبث بملفات النظام من قبل العميل وعدم توفر هذة الملفات في ملف النظام تضهر هذة الاخطاء.
– ادخال بيانات خاطئه للنظام من قبل العميل لم يتم أحتسابها من قبل المبرمج أو لم تقييد المستخدم بانواع البيانات المدخلة بشكل صحيح.
– غيرة من الاخطاء الغير محتسبة.
لتفادي هذة الاخطاء وعدم ضهور هذة الرسالة عند العميل وتوقف النظام
يمكنك إستخدام لحل ذالكTry{} Catch(Ex){} 
ستقوم بوضع أكواد وظائف النظام بداخل Try{ Code in; }

و عندما يعمل النظام ستقوم ال Try بتنفيذ ما بداخلها من أوامر برمجية وعندما تنفذ كود فية خطاء ستتوقف عند ذالك الكود ولن تنفذ ما بعدة من أوامر برمجية وستنتقل لتنفيذ الاكواد التي بداخل ال Catch(Ex){} دون توقف النظام عن العمل ،
حيث يمكنك وضع كود بداخل ال Catch(Ex){} تضهر رسالة للمستخدم عن وجود خطاء بتفاصيل معينه تكتبها انت أو يمكنك أضهار الرساله التي يعرضها النظام الاساسي عن سبب مشكلة الكود الذي وجد فية خطاء ولم يتم تنفيذة بالشكل التالي :-

كود :
try
{
int[] a = new int[1];
a[1] = 1;
console.writeLine(“no errror”);
}
catch (Exception e)
{
Console.WriteLine(“Method: {0}”, e.TargetSite);
Console.WriteLine(“Message: {0}”, e.Message);
Console.WriteLine(“Source: {0}”, e.Source);
}



كذالك يوجد في ال Try حالة أضافية وهي Finally {} ويتم كتابتها بعد ال Catch(Ex){} و ويتم تنفيذ ما بداخلها في حالة وجود خطأ او لا.
فلنفرض أن نظامك يخزن البيانات في قاعدة البيانات وكود الاضافة يكون بالشكل التالي :-


كود :
Con.Open();
Cmd = new ….Command( (“insert into ….”,Con);
Cmd.ExecuteNonQuery();
Con.Close();


في هاذا الكود إذا حصل خطاء في أمر الاضافة فسوف يقف النظام عن العمل وستظهر رسالة الخطاء ولكن إذا إستخدمنا Try{} Catch(Ex){} فسوف يكون الكود بالشكل التالي :-


كود :
try
{
Con.Open();
Cmd = new ….Command( (“insert into ….”,Con);
Cmd.ExecuteNonQuery();
Con.Close();
}
catch (Exception ex)
{
Con.Close();
MessageBox .Show(“Method: “+ ex.TargetSite +
“\nMessage: “+ ex.Message +
“\nSource: “+ex.Source);
}


في هذا الكود إذا حصل خطاء في أمر الاضافه سيتوقف تنفيذ الاكواد التي بداخل ال Try عند امر الاضافة Cmd.ExecuteNonQuery(); وسيتم تنفيذ ما بداخل ال catch (Exception e) وهو إغلاق الاتصال بقاعدة البيانات وإضهار رسالة بتفاصيل الخطاء التي من قبل النظام الاساسي ولن يتوقف النظام عن العمل.
ولكن لو لاحضت أنه تم كتابة أمر أغلاق الاتصال بقاعدة البيانات Con.Close(); مرتين وذالك مرة في ال Try وأخرى في ال catch (Ex)
ماذا لو كان لديك أكواد لتهيئة شاشة ادخال البيانات لأدخال بيانات جديدة من قبل المستخدم أو أي مهام أخرى سيتطلب منك أن تقوم بكتابة الاكواد مرتين بنفس الشكل طبعا في حال لم تستخدم ال Finally {} ،
ولكن أذا قمت بإستخدامها ستقوم بكتابة الاكواد مرة واحدة فقط بالشكل التالي :-


كود :
try
{
Con.Open();
Cmd = new ….Command( (“insert into ….”,Con);
Cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox .Show(“Method: “+ ex.TargetSite +
“\nMessage: “+ ex.Message +
“\nSource: “+ex.Source);
}
Finally
{
Con.Close();
// Somehing Code
}


مصدر المعلومات :-
(Try-Catch) أقتناص الاخطاء Catching Exceptions

الى هنا أعزائنا الكرام نسأل المولى ان قد وفقنا في افادتكم في هذه المعلومات 
وفق الله الجميع