アクティブな IDataReader オブジェクトを Repeater、GridView などに割り当てると、DataBind メソッドの呼び出しが完了すると自動的に閉じられるのでしょうか?それとも明示的に自分で閉じる必要がありますか?
this.sampleRepeater.DataSource = ExampleDAL.GetIDataReader();
this.sampleRepeater.DataBind();
アクティブな IDataReader オブジェクトを Repeater、GridView などに割り当てると、DataBind メソッドの呼び出しが完了すると自動的に閉じられるのでしょうか?それとも明示的に自分で閉じる必要がありますか?
this.sampleRepeater.DataSource = ExampleDAL.GetIDataReader();
this.sampleRepeater.DataBind();
DataReaderタイプでは、データにアクセスしている間、接続を開いたままにする必要があります。これは、たとえばDataTableのような切断されたデータソースではありません。あなたはこれを自分で閉じなければなりません、さもなければあなたはそれが自然の原因で死ぬのを待っています:)。
代替案に興味がありますか?データをDataTable、DataSetに入れるか、返された行をカスタムオブジェクトのリストに変換して、そのうちの1つを返します。
お役に立てば幸いです。
Reflectorを使用してRepeaterのコードを確認しましたが、IDataReaderが閉じません。あなたはそれを自分でしなければならないでしょう。
自分で閉めるしかないと思います。たとえば、Repeater の DataBind は、そのデータ ソースを閉じません。IDataSource でない場合は、単純に IEnumerable としてキャストし、foreach を呼び出します。