PDA

View Full Version : چطور میشه شماره یه error رو بدست آورد؟



mohammady2
شنبه 19 مرداد 1387, 06:57 صبح
چطور میشه شماره یه error رو بدست آورد تا اگر اون خطا اتفاق افتاد رفتار مشخصی ارائه کرد ؟

aliaaa
شنبه 19 مرداد 1387, 08:55 صبح
با استفاده از بلاک try/catch میتونید روی error مشخصی وقتی ایجاد شد کاری انجام بدید. کافیه که بدونید چه exception ی پرتاب می شه تا توی یه catch مشخص کارتون رو انجام بدید. (مس تونید برای یک try چند catch جدا داشته باشید.



try
{
………….
}
catch(IOException)
{
....

}
catch(Exception)
{
}

mohammady2
شنبه 19 مرداد 1387, 10:19 صبح
متشکرم .اما اینو من میدونم .میخوام بگم:

اکر مثلا فلان error بود به کاربر این پیغام رو نشون بده .

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


ضمنا صدمین پستمو به خودم تبریک میگم

naeeme
شنبه 19 مرداد 1387, 11:35 صبح
بعضی از Exception ها مثل SqlException دارای Number یا ErrorCode هستن اما تمامی Exception ها دارای این قابلیت نیستن به همین دلیل شما باید بیشتر رو متن خطا تمرکز داشته باشید تا شماره خطا.
در مورد لیست خطاها هم تا حالا من چنین لیستی ندیدم. اگر دوستان دیدن، مرحمت کنن!!

hdv212
شنبه 19 مرداد 1387, 12:04 عصر
در مورد لیست خطاها هم تا حالا من چنین لیستی ندیدم. اگر دوستان دیدن، مرحمت کنن!!


select * from sys.messages where language_id = 1033

همچنین میتونید تمام Error Message هایی که مربوط به محصولات مایکروسافت هستند رو در این لینک (http://www.microsoft.com/technet/support/ee/ee_advanced.aspx) جستجو کنید.

reza1357
شنبه 19 مرداد 1387, 12:24 عصر
چطور میشه شماره یه error رو بدست آورد تا اگر اون خطا اتفاق افتاد رفتار مشخصی ارائه کرد ؟
کافیه موقع error دادن برنامه در قسمت کادر error ها کد ارور رو ببینید بعد در try/catch این ارور رو بنویسید و پیغام مورد نظر رو برای کاربر نشون بدین.

saeed razaee
شنبه 19 مرداد 1387, 16:19 عصر
با سلام
فصل نهم اداره كردن استثناها از كتاب آموزش گام به گام #c از جعفر نژاد قمي انتشارات علوم رايانه را مطالعه فرمائيد.

__Genius__
شنبه 19 مرداد 1387, 16:36 عصر
توی فایلی با نام WinError.h همچین چیزی که شما میخواهی تعریف شده .
با تابعی به نام FormatMessage هم میتونی شماره یک Error رو بدی و پیغام اون رو دریافت کنی که همیشه این اعداد یک سری اعداد 32 بیتی هستن .
و اما برای بدست آوردن شماره Error هم میتونی از تابع GetLastError استفاده کنی ...
توی WinError.h هم پیغام ها به این صورت تقسیم بندی میشن :

1 - MessageID
MessageText - 2
Number- 3

MessageID یک ماکرو هست برای اینکه موقعی که تابع GetLastError رو بکار گرفتی بتونی با مقدار return شده از GetLastError اونو مقایسه کنی .
MessageText یک توضیح به زبان انگلیسی هست در مورد Error که میتونه به زبانهای دیگه هم باشه که بستگی به نوع پارامتر دهی شما توی تابع FormatMessage داره .
Number هم اون شماره Error ی هست که برای اون error مشخص در نظر گرفته میشه .
این هم قسمتی از فایل WinError.h برای درک بهتر مطلب :




//
// MessageId: ERROR_READ_FAULT
//
// MessageText:
//
// The system cannot read from the specified device.
//
#define ERROR_READ_FAULT 30L

//
// MessageId: ERROR_GEN_FAILURE
//
// MessageText:
//
// A device attached to the system is not functioning.
//
#define ERROR_GEN_FAILURE 31L

//
// MessageId: ERROR_SHARING_VIOLATION
//
// MessageText:
//
// The process cannot access the file because it is being used by another process.
//
#define ERROR_SHARING_VIOLATION 32L

//
// MessageId: ERROR_LOCK_VIOLATION
//
// MessageText:
//
// The process cannot access the file because another process has locked a portion of the file.
//
#define ERROR_LOCK_VIOLATION 33L

//
// MessageId: ERROR_WRONG_DISK
//
// MessageText:
//
// The wrong diskette is in the drive.
// Insert %2 (Volume Serial Number: %3) into drive %1.
//
#define ERROR_WRONG_DISK 34L

mohammady2
شنبه 19 مرداد 1387, 16:40 عصر
select * from sys.messages where language_id = 1033

همچنین میتونید تمام Error Message هایی که مربوط به محصولات مایکروسافت هستند رو در این لینک (http://www.microsoft.com/technet/support/ee/ee_advanced.aspx) جستجو کنید.

.همیشه پستهای شنا جناب hdv212 بهترین مرجع راه حل برای من بوده .
با تشکر از شما

mohammady2
شنبه 19 مرداد 1387, 20:44 عصر
جناب genius با تشکر از توضیحات فوق العادتون این فقط بفرمایین این جناب WinError.h کجا تشریف دارن .

__Genius__
یک شنبه 20 مرداد 1387, 08:48 صبح
سلام .
توی شاخه include میتونین پیداش کنین ولی خوب من دیگه براتون ضمیمه کردم .
:لبخندساده: