2009-06-10 27 views
0

我的任務是創建一個客戶端可以用來從特定數據源獲取數據的類。例如,主要程序將我應該如何跟蹤打開的DataReader?

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

我知道,數據訪問應用程序塊做到這一點,但我不能使用的應用程序塊的原因,我就不解釋了。無論如何,我打算借用一些邏輯。

但是,我的另一部分任務是跟蹤打開的DataReader。這只是爲了驗證每個人正確關閉他們的讀者。我的計劃是在這個新類中只有一個DataReader集合,每次調用GetDataReader例程時都會添加它。在應用程序執行結束時,代碼將通過此集合並將警告記錄到每個仍處於打開狀態的閱讀器的文件中。

所以,我有2個問題:

  1. 有什麼內在的錯誤這樣的設計?
  2. 是否有無論如何我可以從DataReader執行SQL命令?這將大大簡化搜索未關閉的閱讀器。或者,我是否必須存儲讀取器/命令對才能獲取這些信息?
+0

Duplicate:http://stackoverflow.com/questions/941126/how-to-manage-sqldatareaders-in-a-data-access-layer – scottm 2009-06-10 18:29:49

回答

2

您是否考慮過讓數據訪問組件更高一點來執行規則?例如,爲了強制執行get-in-get-your-data-and-get-out-and-close策略,我們只返回數據訪問組件中的數據集和縮放器(我們還強制執行其他規則,例如僅使用存儲過程與數據庫交互)。如果呼叫者真的只需要數據而不需要數據讀取器,那麼也許你可以從讀取器讀取數據然後關閉它,因此不必擔心跟蹤讀取器的狀態。

如果您確實有技術需求返回DataReader(並且會有很多),也許而不是返回原始讀取器,您可以創建包裝類或讀取器的子類,然後返回它。例如一個TrackedDataReader。然後,你可以在書本中加入課堂本身。只是一個想法。

+0

我們需要獲得DataReader和DataSet的靈活性。我不確定我是否明白您的TrackedDataReader的含義。讀者們收集的書將是自己保存的書。我想我們說的是同樣的事情。 – bsh152s 2009-06-10 19:45:33