PDA

View Full Version : سوال: خطاهای کنترل نشده



haamidd
جمعه 05 تیر 1394, 19:32 عصر
سلام و خسته نباشید.
چطور میشه وقتی یک خطایی در سایت رخ میده تمام متن خطایی تو صفحه ظاهر میشه رو دریافت کرد تا در دیتابیس ذخیره کرد؟ و یا اینکه یک تصویر از مرورگر گرفته بشه که متن خطا رو بصورت کامل نشون بده؟


در ضمن من نمیخوام از ماژول های آماده استفاده کنم.
ممنون

xsbehx
جمعه 05 تیر 1394, 19:46 عصر
سلام
شما کافی تمام دستوراتت رو داخل ساختار try-catch بزاری
بعد بیای تو داخل try کدها مربوطه که باید اجرا بشه رو بزاری و داخل catch یک دستور insert بنویسی که شماره خطا و عنوان خطا و ... رو داخل جدول مورد نظر که برای نگهداری خطا هست ذخیره کنی.
البته خطایی که شما داری ذخیره می کنی همشون انگلیسی و تخصصی هستند و بدرد شما برنامه نویسی می خورند نه مدیری که با این چیزا اشنایی نداره. پس بهتره به جای متن خطا متن خودتون رو داخل جدول مورد نظر ذخیره کنید. به این صورت:


try
{
کدها مورد نظر در صورت اجرای عادی برنامه
}
catch (Exception ex)
{
کد insert داخل جدولی که برای نگهداری خطا هست. محتویاتیش هم می تونه خطای فارسی که دوست داری مدیر ببینه باشه
یا
ex.
}

اون ex یک متغییر که شما می تونی اسمش یه چیزه دیگه بزاری و ازش استفاده کنی
شما بنویسی ex بعد. بزنی یکسری متد اماده داره که هر کدوم برای برگردوندن یک چیزی هست. شما می تونی از message و ... استفاده کنی تا اون چیزی که می خوای رو برگردونی
مثل شماره خطا یا متن خطا یا ...

haamidd
جمعه 05 تیر 1394, 19:54 عصر
من این مورد رو کلا تکمیل کردم و با فایل global.aspx انجام دادم ولی فقط میخوام بدونم که چطور میشه کل متن صفحه ی اررور رو بدست آورد و یا اینکه تصویری ازش ذخیره کرد.

xsbehx
جمعه 05 تیر 1394, 20:30 عصر
خوب با روشی که من تو بالا گفتم شما هم می تونی متن خطا رو بدست بیاری. هم کد خطا رو بدست بیاری هم خطی که توش خطا اتفادق افتاده هم ....

منظورتون از کل متن خطا یعنی چی؟

haamidd
جمعه 05 تیر 1394, 21:49 عصر
من اینو انداختم تو global.asax


protected void Application_Error(object sender, EventArgs e)
{
Common.AddNewLog(Common.LogType.ErrorLog, sender.ToString(), "Error", Server.GetLastError().Message);
//Response.Redirect("/Error.html");
}







خب طبق صحبت های شما در متغیر ex کل متن اررور موجود هست.
خب من در فایل global چطور میتونم به این متغییر که از کلاس exeption هست به دست بیارم؟

xsbehx
شنبه 06 تیر 1394, 00:36 صبح
ببین شما می تونی یک تابع Insert بنویسی.
می یای اینطوری مثلا می نویسی:


public string Insert(string fldName, string fldFamily)
{
}

حالا داخل تابع مورد نظر یک try-catch می نویسی:


try
{
دستورات مورد نظر برای ثبت داده
return "عملیات مورد نظر با موفیت انجام گردید";
}

بعد دستورات Catch رو هم اینطوری می نویسی


catch(Exception ex)
{
retrun ex.message.tostring();
}

حالا شما می تونی به جای پیغام خطا چیزهایی دیگه رو هم برگردونی:


ex.Message.ToString();
ex.InnerException.Message.ToString();
ex.HResult.ToString();
ex.HelpLink.ToString();
ex.Source.ToString();
ex.StackTrace.ToString();

حالا اگر بخوای از تابع بالا استفاده کنی می نویسی


Response.Redirect(Insert("ali","mosavi"));