我应该如何跟踪开放的DataReaders?

时间:2009-06-10 18:25:45

标签: c# datareader

我的任务是创建一个客户可以用来从特定数据源获取数据的类。例如,主程序将是

IDataReader GetDataReader(DbCommand command);
DataSet GetDataSet(DbCommand command);

我知道数据访问应用程序块执行此操作但我无法使用应用程序块,原因我不会解释。无论如何,我打算借用一些逻辑。

但是,我的另一部分任务是跟踪打开的DataReader。这只是为了验证每个人都正确地关闭他们的读者。我的计划是在这个新类中只有一个DataReader集合,每次调用GetDataReader例程时都会添加它们。在应用程序执行结束时,代码将通过此集合并将警告记录到仍处于打开状态的每个阅读器的文件中。

所以,我有两个问题:

  1. 这个设计有什么本质上的错误吗?
  2. 无论如何我可以从DataReader获取SQL命令吗?这将大大简化对未封闭读者的搜索。或者,我是否必须存储读取器/命令对才能获取此信息?

1 个答案:

答案 0 :(得分:2)

您是否考虑过将数据访问组件提升一级以实施规则?例如,为了实施get-in-get-your-data-and-out-out-out-out-close策略,我们只从数据访问组件返回数据集和缩放器(我们还强制执行其他规则,例如仅使用存储过程与数据库交互)。如果呼叫者真的只需要数据而不是数据阅读器,也许你可以从阅读器读取数据然后关闭它,因此不必担心跟踪阅读器的状态。

如果你确实需要返回DataReader(并且会有很多),也许不是返回原始阅读器,你可以创建包装类或阅读器的子类,而不是返回...一个TrackedDataReader。然后你可以在书中建立自己的课程。只是一个想法。