使 C# 中捕获的 Mysql 错误对用户友好

Posted

技术标签:

【中文标题】使 C# 中捕获的 Mysql 错误对用户友好【英文标题】:Make Mysql errors caught in c# user friendly 【发布时间】:2011-12-29 14:50:07 【问题描述】:

当在 c# 中引发 mysql 异常时,我试图返回用户友好的错误消息。我目前正在返回异常消息,但该消息对用户不是很友好。所以我想知道你们中是否有人有任何技巧,不需要对收到的错误消息进行任何花哨的正则表达式解析,从而以对他们有意义的方式向用户显示它们。

我试图在插入/更新/删除记录之前远离复杂的验证代码,但这似乎是唯一的方法......除非你知道得更好!

【问题讨论】:

每一个mysql错误都有一个错误码:dev.mysql.com/doc/refman/5.5/en/error-messages-server.html你可以自己写错误信息。 嗨,Marc,这似乎是个好主意,但我可以从异常对象中的哪个方法获取此代码?我似乎只收到了 MySql.Data 异常和来自 db 的消息而没有错误代码 【参考方案1】:

正如Marc B 指出的,每个Mysql 错误都有一个错误代码,因此您可以使用try ... catch 块捕获MySqlException,如下所示:

try



catch (MySqlException ex)

    int errorcode = ex.Number;

所以你可以写一个case语句来为每个错误代码提供错误信息,这里是server error codes and messages的列表。

【讨论】:

是的,我认为我的主要问题是我正在捕获 Exception 而不是特定的 MySqlException,因此我无权访问 Number 属性。非常感谢。【参考方案2】:

您可以尝试捕获特定的 sql 错误消息并显示它

Try

Catch ex as SqlException
'''sql specific error message
''ie: 
response.write("oops! error message: " & ex.message)
Catch ex as Exception
'''any other runtime error messages
End Try

【讨论】:

嗨 Carlos,这就是我目前正在做的事情,但是插入时的重复键并不是每个人都容易理解的消息我试图在这些错误的基础上构建一个用户友好的消息,例如“输入的值已存在于系统中” 不幸的是,没有办法将错误消息翻译成普通乔能理解的措辞。我过去所做的是使用资源文件并将 .Net 异常消息放入一列,然后在第二列中放入最终用户翻译。非常整洁,但是对于那个项目,我要求错误必须易于用户理解。异常确实是为程序员设计的,以编程方式处理(翻译成用户友好的消息,记录错误等)以更优雅地处理错误。

以上是关于使 C# 中捕获的 Mysql 错误对用户友好的主要内容,如果未能解决你的问题,请参考以下文章

spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获

C#:捕获混合托管/非托管进程的所有错误/异常

Winform 全局异常捕获

在 Asp.net Web API 中捕获 404 错误

有没有办法在 PHP 中捕获 MySQL 和数据库错误?

如何在 C# 中读取正则表达式捕获