如何将Oracle错误消息转换为更加用户友好的消息?

时间:2013-11-21 04:32:17

标签: vb.net oracle

我正在编写一个与Oracle数据库相关的VB.Net应用程序。

当应用程序出现问题时,假设我尝试在不接受空值的列中插入空值,Oracle会引发一个错误,该错误在应用程序中使用Try / Catch进行处理。

错误,消息并不总是用户友好:

实施例 错误Ora:1400,尝试在“USER”列中插入NULL。“TABLE”。“COLUMN”

这不是我想向用户显示的错误消息。不希望用户看到Oracle“user”或“table”等技术人员。

所以我要做的就是替换:

  • 尝试在“USER”列中插入NULL。“TABLE”。“COLUMN”

通过

  • 应填写“Column”字段。

现在,如何获得“专栏”?当然,我可以分析异常消息的字符串并提取列,但是如果我的应用程序连接到另一个版本的Oracle,但是我的应用程序将无法正常工作。

有没有人知道将Oracle“技术”错误消息转换为用户友好消息的类?

感谢。

(Null属性只是一个例子,因此列中的 AllowDBNull = true 实际上不是解决方案)

2 个答案:

答案 0 :(得分:2)

这正在扩大jfrankcarr的评论:

我会认为像这样的Oracle错误消息是一个例外 - 通常我会编写应用程序代码以在它到达数据库之前进行所有验证,并提供用户友好的错误消息。

然后,Oracle变成了一个“安全网”,它可以确保错误的数据永远不会进入系统,如果出现错误超出应用程序验证的话会引发异常。因此,您需要对应用程序进行编码以对任何Oracle错误执行某些操作 - 例如记录它,将其发送给IT支持人员,并向用户显示“系统错误”消息或类似信息。

答案 1 :(得分:1)

你可以这样做。

EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
raise_application_error (-20001,'You have tried to insert a duplicate supplier_id.');

我从未在前端工作过,所以不确定你将如何抓住它。这是您尝试捕获重复条目的示例,您需要捕获所有异常。 但对此的限制是,它仅适用于PL-SQL。

另一个选项是在连接到oracle之前进行前端验证。但这会降低性能。