データベースに 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 だけでそれを行うことは可能ですか?