我正在编写一个与Oracle数据库相关的VB.Net应用程序。
当应用程序出现问题时,假设我尝试在不接受空值的列中插入空值,Oracle会引发一个错误,该错误在应用程序中使用Try / Catch进行处理。
错误,消息并不总是用户友好:
实施例 错误Ora:1400,尝试在“USER”列中插入NULL。“TABLE”。“COLUMN”
这不是我想向用户显示的错误消息。不希望用户看到Oracle“user”或“table”等技术人员。
所以我要做的就是替换:
通过
现在,如何获得“专栏”?当然,我可以分析异常消息的字符串并提取列,但是如果我的应用程序连接到另一个版本的Oracle,但是我的应用程序将无法正常工作。
有没有人知道将Oracle“技术”错误消息转换为用户友好消息的类?
感谢。
(Null属性只是一个例子,因此列中的 AllowDBNull = true 实际上不是解决方案)
答案 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之前进行前端验证。但这会降低性能。