SqlClient.SqlDataReader は .NET 管理オブジェクトですか? Close() メソッドを明示的に呼び出して開いている接続を閉じる必要があるのはなぜですか? そのようなオブジェクトのスコープを使い果たした場合、これは自動的に閉じられるべきではありませんか? とにかくガベージコレクターはそれを片付けるべきではありませんか?
ここでのベストプラクティスは何かを理解するのを手伝ってください。
ここで関連する質問を見ましたが、Web アプリケーションで発生した問題をさらに説明しています。問題は、接続が不足していたことです。詳細なエラーは次のとおりです。
Exception: System.InvalidOperationException
Message: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Source: System.Data
at System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction)
at System.Data.SqlClient.SqlConnection.Open()
これを修正するには、すべての SQLDataReader オブジェクトを明示的に閉じる必要がありました。
.NET Framework 3.5 を使用しています