2

ObjectContext ExecuteStoreQueryストアド プロシージャが返す結果セットを取得できるように、メソッドを使用して呼び出しているストアド プロシージャがあります。

try/catch ブロックの中にありますが、ストアド プロシージャが次のエラーを返しても、catch ブロックには入りません。

このタイプのエラーをトラップするにはどうすればよいですか?

または、ストアド プロシージャを実行して結果セットを取得する別の方法はありますか?

SQL で実行した場合のエラー:

メッセージ 50000、レベル 16、状態 2、プロシージャ ComputeCharges、行 6440
料金の計算中に次のエラーが発生しました:
エラー番号: 515、行番号: 5867
エラー メッセージ: 値 NULL を列 'TransactionAmount'、テーブル 'Transactions' に挿入できません。列はヌルを許可しません。INSERT は失敗します。

呼び出しコード:

using (DbContext dbContext = GetDbContext())
{
   using (ObjectContext objContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)dbContext).ObjectContext)
   {
       try
       {
           IEnumerable<ResultSet> results = objContext.ExecuteStoreQuery<ResultSet>(sqlString).ToList();
        }
       catch (Exception e)
       {
          EventLogger.LogException(e, title: "An error occurred while computing charges.", silent: false);
       }
   }
}
4

1 に答える 1

0

この場合、結果セットがまだ選択/返されていない限り、C# で例外が正しくスローされます。ストアド プロシージャは、try ブロックの最後ではなく、プロセスの途中で結果セットを選択していました。結果セットの select ステートメントが try ブロックの最後に移動されると、C# で例外がスローされました。

于 2015-04-24T18:26:27.480 に答える