1

ASP.NET MVC 4 アプリで、PetaPoco から次のデータベース接続エラーが発生することがあります。

There is already an open DataReader associated with this Command which must be closed first.;
System.Data;    at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)...    

システムへの負荷が増えると、これが発生するようです。

調査中に見つかったいくつかの提案は次のとおりです。

  • クエリの代わりに PetaPoco Fetch を実行する
  • MultipleActiveResultSets=True を接続文字列に追加します

PetaPoco の経験のある人は、これらの提案が役立つことを確認できますか? 例外を回避するためのその他の提案をいただければ幸いです。

更新 2013 年 6 月 10 日クエリを Fetch に変更し、いくつかの改善が見られましたが、それでもエラーが表示されることがあります。

接続文字列をMultipleActiveResultSets=Trueに変更するとどのような欠点があるか知っている人はいますか?

4

1 に答える 1

2

リクエストごとに PetaPoco DB を作成していることを確認してください (静的ではありません)。

参照: petapoco を使用して DAL を作成する方法

更新 06/10/2013すべてFetchのメソッドがメソッドを呼び出しますQuery(ソースを参照)

ここに画像の説明を入力

したがって、一方を他方に変更してもエラーには影響しません。

欠点はMSDNに記載されており、次のような警告が含まれています。

  • ステートメントのインターリーブ
  • セッションキャッシュ
  • スレッドセーフ
  • 接続プーリング
  • 並列実行

私は個人的に試してみましたが、欠点はありませんでしたが (アプリによって異なります)、エラーも解消されませんでした。

エラーを取り除くためにできる唯一のことは、要求コードに従って、コード内でステートメントが 2 回呼び出されている場所を見つけ、その関数で他の DB 接続を使用することです。

また、エラーをキャッチしてから、新しいデータベース接続を作成して、その新しい接続を試すこともできます。

申し訳ありませんが、ここでは魔法の弾丸ではありません。

于 2013-04-26T19:56:06.423 に答える