PDA

View Full Version : کد خطاها و شرح مربوط به آنها



RAMA2009
سه شنبه 16 تیر 1394, 15:27 عصر
سلام
برای برگردوندن خطاهای ex.message به فارسی (هنگام کار با پایگاه داده) باید چکار کنم؟
مثلا برای اضافه کردن داده ی تکراری فیلد کلید، خطایی صادر میشه که میخوام به فارسی نمایشش بدم و کاربر رو راهنمایی کنم
هر خطایی یه کدی داره، فقط کافیه شرح کد رو بدونیم، تا به پیغام فارسی رو نمایش بدیم. من توی سایت های خارجی گشتم ولی شرح مربوط به هر کد رو پیدا نکردم.

کسی کدها و شرح خطاهارو داره؟

RAMA2009
سه شنبه 16 تیر 1394, 17:32 عصر
err.number برای همه خطاها کد 5 رو میده... کسی در این مورد چیزی نمیدونه؟!!:گریه:

محمد آشتیانی
سه شنبه 16 تیر 1394, 19:08 عصر
سلام
با اجرای این کوئری روی دیتابیس Master میتونید به لیست خطاها + توضیحاتشون دسترسی پیدا کنید
SELECT * FROM sys.messages WHERE language_id = 1033

برای مثال اگر در فیلد کلید ، مقدار تکراری وارد کنید ، خطای شماره 2601 صادر میشه با این توضیح

Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'.

و یا این آدرس رو ملاحظه کنید
https://technet.microsoft.com/en-us/library/cc645603(v=sql.105).aspx



موفق باشید.

RAMA2009
چهارشنبه 17 تیر 1394, 13:09 عصر
سلام
با اجرای این کوئری روی دیتابیس Master میتونید به لیست خطاها + توضیحاتشون دسترسی پیدا کنید
SELECT * FROM sys.messages WHERE language_id = 1033

برای مثال اگر در فیلد کلید ، مقدار تکراری وارد کنید ، خطای شماره 2601 صادر میشه با این توضیح

Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'.

و یا این آدرس رو ملاحظه کنید
https://technet.microsoft.com/en-us/library/cc645603(v=sql.105).aspx



موفق باشید.


میشه یه مثال ارائه بدید؟ ممنون

محمد آشتیانی
پنج شنبه 18 تیر 1394, 17:18 عصر
سلام
ببینید اون کوئری که بهتون عرض کردم ، اگر به نتیجش توجه کنید ، چیزی حدود 9000 کد ارور رو پوشش داده ، یعنی شما باید اول متن تک تک اون خطاها رو ترجمه کنی!

تفکیک خطاها ، اگر تعداد محدودی مد نظر باشه ، میتونه چیزی شبیه به این بشه (یعنی شما کوئریت رو در بلوک Try ، اجرا میکنی و اگر خطا داشتی در بخش Catch اون خطا رو مدیریت میکنی)

Try


Dim da As New DataAccess
da.ConOpen()
da.ExecNonQuery("INSERT INTO TEST (id, title) VALUES (1,'hello')")
da.ConClose()

Catch ex As SqlClient.SqlException


Select Case ex.Number
Case 2627
MsgBox("ترجمه متن خطای 2627")
Case 544
MsgBox("ترجمه متن خطای 544")
End Select


End Try




اما اگر بخواهید کل 9000 خطا رو اونم فقط برای SqlServer ترجمه کنید طبیعتا ساختار دیگری رو برای پیاده سازی و نمایش میطلبه.


موفق باشید.

RAMA2009
یک شنبه 21 تیر 1394, 23:03 عصر
سلام
ببینید اون کوئری که بهتون عرض کردم ، اگر به نتیجش توجه کنید ، چیزی حدود 9000 کد ارور رو پوشش داده ، یعنی شما باید اول متن تک تک اون خطاها رو ترجمه کنی!

تفکیک خطاها ، اگر تعداد محدودی مد نظر باشه ، میتونه چیزی شبیه به این بشه (یعنی شما کوئریت رو در بلوک Try ، اجرا میکنی و اگر خطا داشتی در بخش Catch اون خطا رو مدیریت میکنی)

Try


Dim da As New DataAccess
da.ConOpen()
da.ExecNonQuery("INSERT INTO TEST (id, title) VALUES (1,'hello')")
da.ConClose()

Catch ex As SqlClient.SqlException


Select Case ex.Number
Case 2627
MsgBox("ترجمه متن خطای 2627")
Case 544
MsgBox("ترجمه متن خطای 544")
End Select


End Try




اما اگر بخواهید کل 9000 خطا رو اونم فقط برای SqlServer ترجمه کنید طبیعتا ساختار دیگری رو برای پیاده سازی و نمایش میطلبه.


موفق باشید.

ممنون از شما نه برای کل خطاها نمیخوام ترجمه کنم. برای خطاهای رایج؛
ولی برای کل خطاها بنظرم اینجاست که دیگه ما ایرانی ها باید خودمون با کمک همدیگه یه تکونی بخوریم و یه کلاس یا DLL در رابطه با همین موضوع ارائه بدیم... هم برای برنامه نویسای دیگه هم راحتی کار خودمون برای دفعات بعدی...
ببخشید من باز سوال میکنم برای این تفکیک خطا هنگام کار با پایگاه داده ی اکسس راهی نیست؟ چون OleDb.OleDbException چیزی برای کد خطا ارائه نداده یا من ندیدم...