PDA

View Full Version : شماره خطاهای SqlExeption



mahdi_farhani
یک شنبه 09 دی 1386, 19:57 عصر
چطوری میتونم بفهم که چه خطایی رخ داده است ، می خواهم پیغام مناسب به کاربر بدم .
مثلاً Error Number ی که بر می گردونه برای اکثر خطاهایی که من چک کردم 547 ولی یه بار برای Refrence گیر میده ،یه برای برای ForignKey و .... ولی همه بایه شماره خطا
کاری که من کردم پیغام خطا رو خوندم و متن داخلشو چک کردم . حالا میخواهم بدونم آیا راهی هست که بتوان خطاها را به شما تفکیک کرد .

spanishtrain
چهارشنبه 15 خرداد 1387, 18:32 عصر
آقا سوال توپی پرسیدی
منم همین مشکل دارم جوابشو پیدا کردی به منم بگو

sana.2557
دوشنبه 10 خرداد 1389, 15:01 عصر
چطوری میتونم بفهم که چه خطایی رخ داده است ، می خواهم پیغام مناسب به کاربر بدم .
مثلاً Error Number ی که بر می گردونه برای اکثر خطاهایی که من چک کردم 547 ولی یه بار برای Refrence گیر میده ،یه برای برای ForignKey و .... ولی همه بایه شماره خطا
کاری که من کردم پیغام خطا رو خوندم و متن داخلشو چک کردم . حالا میخواهم بدونم آیا راهی هست که بتوان خطاها را به شما تفکیک کرد .


سلام جواب سوالتونو گرفتید؟ میشه من را هم راهنمایی کنید...

hamid67fathi
دوشنبه 10 خرداد 1389, 16:20 عصر
سلام
من چند تا از خطا های متداول رو هندل کردم ، ميتونيد استفاده کنيد
اگر هم تونستيد کاملش کنيد ، داخل همين تاپيک بزاريد تا همه استفاده کنن.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AppFramework.ErrorHandling
{
static public class SqlExceptionHandler
{
static public string ExceptionMessage(int No)
{
string resualt = string.Empty;
switch (No)
{
case 547:// ForeignKey Violation
resualt = "امکان حذف نميباشد،اين رکورد دارای زير مجموعه است.";
break;
case 4060:// Invalid Database
resualt = "بانک اطلاعاتی نا معتبر است.";
break;
case 18456:// Login Failed
resualt = "امکان ورود به بانک با کاربر جاری نميباشد.";
break;
case 2627:// Unique Index/Constriant Violation
resualt = "مقدار وارد شده در سيستم موجود است.";
break;
case 2601:// Unique Index/Constriant Violation
resualt = "مقدار وارد شده در سيستم موجود است.";
break;
case 515 : ///
resualt = "مقداری برای فيلد های اجباری بانک درج نکرده ايد.";
break;
case 208 :
resualt = "جدول مورد نظر يافت نشد.";
break;
case 156:
resualt = "Incorrect syntax near the keyword 'Where'";
break;
default: // 0 ham zir majmoe in hast
resualt = "خطای نا مشخص.";
break;
}
return resualt;
}
}
}

hastiam
شنبه 04 شهریور 1391, 15:09 عصر
سلام
من چند تا از خطا های متداول رو هندل کردم ، ميتونيد استفاده کنيد
اگر هم تونستيد کاملش کنيد ، داخل همين تاپيک بزاريد تا همه استفاده کنن.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AppFramework.ErrorHandling
{
static public class SqlExceptionHandler
{
static public string ExceptionMessage(int No)
{
string resualt = string.Empty;
switch (No)
{
case 547:// ForeignKey Violation
resualt = "امکان حذف نميباشد،اين رکورد دارای زير مجموعه است.";
break;
case 4060:// Invalid Database
resualt = "بانک اطلاعاتی نا معتبر است.";
break;
case 18456:// Login Failed
resualt = "امکان ورود به بانک با کاربر جاری نميباشد.";
break;
case 2627:// Unique Index/Constriant Violation
resualt = "مقدار وارد شده در سيستم موجود است.";
break;
case 2601:// Unique Index/Constriant Violation
resualt = "مقدار وارد شده در سيستم موجود است.";
break;
case 515 : ///
resualt = "مقداری برای فيلد های اجباری بانک درج نکرده ايد.";
break;
case 208 :
resualt = "جدول مورد نظر يافت نشد.";
break;
case 156:
resualt = "Incorrect syntax near the keyword 'Where'";
break;
default: // 0 ham zir majmoe in hast
resualt = "خطای نا مشخص.";
break;
}
return resualt;
}
}
}


سلام به خاطر تاپیک مفیدی که گذاشتید ممنونم.
من میخوام از تابع بالا برای تشخیص نوع خطاهام استفاده کنم که برای اینکار یک کلاس جداگانه نوشتم و از تابع ExceptionMessage استفاده کردم حالا وقتی catch اتفاق افتاد(طبق دستور زیر) میخوام این تابع رو صدا بزنم که این تابع یک شماره از نوع int به عنوان ورودی می گیره.
من این شماره رو چطوری به این تابع بدم؟ من تو Exception چیزی به عنوان code و یا Number ندارم که اون رو به عنوان ورودی بدم.


try
{
.....
}
catch(Exception ex)
{
ExceptionMessage(?);
}

hastiam
چهارشنبه 24 آبان 1391, 07:52 صبح
بالاخره فهمیدم چطوری باید از این شماره ها استفاده کرد؟:تشویق::تشویق::تشویق: خطاهای Exception ، شماره خطا ندارند بلکه خطاهای SqlException (خطاهای Sqlای) دارای شماره خطاست و اگر در catch از دستور زیر استفاده کنیم مشکل حل می شود.:لبخندساده:


catch (Exception ex)
{
if (ex.InnerException.InnerException.GetType() == typeof(SqlException))
{
result.Message = ExceptionMessage(((SqlException)ex.InnerException. InnerException).Number);
}
else
{
......
}

}