私はクライアントが特定のデータソースからデータを取得するために使用できるクラスを作成することを任されています。例えば、メインルーチンが開いているDataReaderをどのように追跡する必要がありますか?
IDataReader GetDataReader(DbCommand command);
DataSet GetDataSet(DbCommand command);
になります私は、データアクセスアプリケーションブロックがこれを行うことを知っているが、私は説明しません理由のためにアプリケーションブロックを使用することはできません。とにかく、私はいくつかの論理を借りるつもりです。
しかし、私の仕事のもう1つの部分は、開いているDataReaderを追跡することです。これは誰もが読者を適切に閉じていることを確認するだけのことです。私の計画は、GetDataReaderルーチンが呼び出されるたびに追加される、この新しいクラスの内部にDataReaderのコレクションを持つことだけでした。アプリケーションの実行が終了すると、コードはこのコレクションを通過し、まだ開いている各リーダーのファイルに警告を記録します。
だから、私は2つの質問を持っている:
- は、この設計で、本質的に間違っているものはありますか?
- DataReaderからSQLコマンドを実行することはできますか?これにより、クローズされていないリーダーの検索が大幅に簡略化されます。または、この情報を取得するためにリーダー/コマンドのペアを格納する必要がありますか?
重複:http://stackoverflow.com/questions/941126/how-to-manage-sqldatareaders-in-a-data-access-layer – scottm