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