• 締切済み

トランスポートレベルのエラー

VB2005、SQLServer2005でWebアプリケーションを開発しています。 Web画面で、あるテーブルからデータを検索する処理をある一定の時間毎に繰り返すような画面があるのですが、時々エラーが発生してしまいます。 エラーの内容は、「トランスポートレベルのエラーが発生しました。(既存の接続はリモートホストに強制的に切断されました)」というエラー内容です。 エラーが発生しない事がほとんどなのですが、時々発生してアラートが上がってしまうため困っています。 ロジック的な問題なのか・ネットワーク的な問題なのか切り分けも出来ない状況です。 何か対応策や同じような(似たような)事例をご存知でしたら教えて下さい。 よろしくお願いします。

みんなの回答

noname#259269
noname#259269
回答No.4

コネクションプールの数は、接続文字列内で指定できます。 最大数を超えて要求すると、コネクションタイムアウトの設定時間までは待機し、その後接続エラーになります。コネクションタイムアウトも接続文字列内で指定できます。 http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectionstring(VS.80).aspx

bekio
質問者

お礼

最大数を越えると接続エラーになるという事は、一定時間毎にコネクションを確立する当アプリケーションの場合、時々エラーが発生するという事に結びつきそうですね。 コネクションプールのクリアを入れた形で様子を見てみようと思います。 たびたびご回答いただきありがとうございます。

noname#259269
noname#259269
回答No.3

>コネクションとSQL実行は共通クラスで行っています。 実装は公開可能でしょうか? たまに、SqlConnection.ClearAllPools してみるとか(対処法的ですが)。 SQL で言うと、昔 Oracle なんかでは、マイナーな組み込み関数を使うとエラーが出たりしていましたが。。。 --- WHERE 1=1 の件、ProKaseifu さんのご回答に補足しますと、 画面入力等によって追加の条件が発生する場合に、" AND xxx=yyy" などという文字列を連結していきますので、最初に " WHERE 1=1 " と書いておけば、" AND "句の要否考慮をしなくて良くなる訳です。

bekio
質問者

補足

実装の公開はちょっと難しいです。。。すみません。 sqlConnection.ClearAllPoolsは調査している時に、気になったメソッドの1つです。 コネクション情報はPoolされていて、それらを一度すべて空にするというメソッドらしいですね。 コネクションPoolについてあまり詳しくないのですが、Pool出来る数?には限界があるのでしょうか? もしあった場合、さらにコネクションを確立しようとした場合どのような状態になるのでしょうか?

回答No.2

where 1 = 1 は動的SQL作成するときによくやる手法ですね。

noname#259269
noname#259269
回答No.1

お力になれるかは分かりませんが、とりあえずセオリーとして、 SqlConnection, SqlCommand, SqlDataAdapter 類は Close, Dispose を確実に行っていますか?

bekio
質問者

補足

回答ありがとうございます。 Close、Disposeは見直しを以前に行い、必要な箇所には全て埋め込んでいます。 コネクションとSQL実行は共通クラスで行っています。 ちょっと調査をしていて気になった点があったので追加情報ですが、 当エラーが頻繁に発生しているSQL文に「WHERE 1 = 1」という条件が含まれているのは何か関係あるでしょうか?

関連するQ&A