0

我正在使用 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 类,因为当我们在我的工作场所与企业库相邻使用该类时,它看起来并不好。如果我们使用的是企业库,那么我们应该将它单独用于所有与数据库相关的功能。

这让我想到了我的问题;我该如何处理这种情况?是否可以单独使用企业库来做到这一点?

4

1 回答 1

0

如果您需要将代码作为您正在做的事情并且仍然安全,那么您可以这样做:

  • 当没有遇到错误时,如果我假设返回的 ErrorCode 将是一个空值,你可以这样做:

    if(erCode==null)
    errorCode = 1;
    
  • 设置 ErrorCode =1 肯定会表明操作成功。

  • 将您的代码修改为:

    if (errorCode = -1)
    {
        lblMsg.Text = "Username already exists";
    }
    else if(errorCode = 1)
    {
        lblMsg.Text = "Username changed successfully";
    }
    else{
        lblMsg.Text = "Unknown error while updating!";
    }
    
  • 因此,如果有任何其他错误代码,则会显示相关消息!

希望你觉得值得!

于 2012-07-06T21:10:33.937 回答