【发布时间】:2012-07-06 20:54:08
【问题描述】:
我正在使用 C#、企业库和 Oracle 为数据库构建一个 ASP.NET Web 应用程序。这是我第一次使用 Oracle 作为数据库,到目前为止我的经验并不是那么好(我更喜欢使用 MS SQL Server)。所以这是场景:
用户可以输入和更改数据库中唯一字段的值(例如 - 用户名)。如果用户输入了一个已经作为不同记录输入的值(在此上下文中为用户名),则要求通知用户。由于插入和/或更新是通过存储过程完成的,我决定在存储过程中处理异常。为此,我声明了一个名为 erCode 的 NUMBER 类型的 out 参数,并将以下块添加到 SQL 语句之后的存储过程中。
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
erCode := SQLCODE
如果 INSERT/UPDATE 操作成功,我返回 erCode 值为 0。
由于有返回值,应用程序的数据访问层 (DAL) 中的代码的 try-catch 块中自然不会捕获异常。因此,我将 erCode 的值从 DAL 返回到业务逻辑层 (BLL),然后返回到 UI 层,我在 inside try 块中通过以下方式处理它:
if (errorCode = -1)
{
lblMsg.Text = "Username already exists";
}
else
{
lblMsg.Text = "Username changed successfully";
}
我意识到这是一种可怕的方法,即使 oracle 错误代码是除“-1”之外的值,那么 用户名已成功更改 也会显示出来,这完全是误导性的。
我不应该使用 System.Data.OracleClient.OracleException 类,因为当我们在我的工作场所与企业库相邻使用该类时,它看起来并不受欢迎。如果我们使用的是企业库,那么我们应该将它单独用于所有与数据库相关的功能。
这让我想到了我的问题;我该如何处理这种情况?是否可以单独使用企业库来做到这一点?
【问题讨论】:
标签: c# oracle exception enterprise-library