0

データベースに C#、Enterprise Library、および 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";
}

オラクルのエラーコードが「-1」以外の値であっても、これは恐ろしい方法だと思います。ユーザー名が正常に変更されたことが表示され、完全に誤解を招く可能性があります。

System.Data.OracleClient.OracleException クラスを使用することは想定されていません。職場で Enterprise Library に隣接して System.Data.OracleClient.OracleException クラスを使用すると、好意的に見なされないからです。Enterprise Library を使用している場合は、すべてのデータベース関連機能に単独で使用する必要があります。

これは私の質問に私をもたらします。そのようなシナリオをどのように処理できますか? Enterprise Library だけでそれを行うことは可能ですか?

4

1 に答える 1

0

あなたがやっていることとしてコードを取り、それでも安全な側にいる必要がある場合は、次のようにすることができます:

  • エラーが発生しない場合、返される ErrorCode が null 値になると仮定すると、次のようにすることができます。

    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 に答える