.Net 4.0 と SQL Server 2008 R2 上のステージング Web アプリケーションは、2 か月以上スムーズに動作していました。突然、アプリケーションで次のようなエラーが発生し始めました。
エラー メッセージ: System.InvalidOperationException: 内部接続の致命的なエラーです。System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior、SqlCommand cmdHandler、SqlDataReader dataStream、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj) で System.Data.SqlClient.SqlDataReader.HasMoreResults() で
これは、データベース クエリが 700 行以上を返すたびに発生します。奇妙なことに、私の実稼働 Web サイト (ステージングと同じコード ベース) は、ステージング データベースに接続している間は正常に動作します。
ステージング Web サーバーを運用データベース (ステージング データベースの同様のコピー) に接続しようとしましたが、同じエラーが発生します。このエラーは差し迫っており、ページが読み込まれることもあれば、エラーが発生することもあります。
行数を 700 未満に減らすと、ページは正常に機能します。
特定の Stored Proc がページで 1 回だけ呼び出されます。
私は次のことをしました:
- usingブロックでコマンド オブジェクトを使用するようにコードを変更しました。
- 使用後すぐに接続を閉じる。
- ステージングと運用の IIS サーバー設定を比較すると、似ているように見えました。
- 同じ MDAC が両方の Web サーバーにインストールされています。
しかし、何の役にも立たず、ステージング Web サーバーでまだエラーが発生します。クエリは SQL Server Management Studio で正常に実行され、3 秒未満かかります。
誰でもこれに対する解決策を提案できますか?
これは、Stored Proc が呼び出されるコード ベースです。
string strSPName = SQLSchema.strSQLSchema + SPNames.<Some SP Name>;
using (conn)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = strSPName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Parameters.Add(SPParams.<Some Param>, SqlDbType.Int);
cmd.Parameters[0].Value = <value of Param>;
conn.Open();
dsSubmitter = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dsSubmitter);
if (dsSubmitter.Tables.Count != 0)
{
dsSubmitter.Tables[0].TableName = DALConstants.<Table Name>;
}
conn.Close();
}
SP は、select ステートメントと、マスター テーブルとディテール テーブルの間の INNER 結合を使用する非常に単純なものです。マスター テーブルには最大 400 行、詳細テーブルには 10,000 行以上あります。SQL クエリは約 4000 行を返します。