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