2009-01-26 250 views
11

我們都知道DataReader比DataTables更快,因爲DataReader用於構建DataTable。如何將DataTable轉換爲IDatareader?

因此,鑑於我已經有一個DataTable .... 爲什麼我要將它轉換爲DataReader?

那麼我正在創建一個名爲IDataProvider的內部接口。該接口旨在在本地和WebService中實現。該接口將有一個方法「Getdata」,該方法接收一些標準信息並返回一些數據。

由於DataReader是最快的數據檢索機制,因此我希望將其用作「GetData」方法的結果類型。 但是我們也知道DataReader是不可序列化的,因此不能通過Web服務在網絡上傳輸...

在網絡的情況下,我會讓本地代理類以DataTable的形式請求數據,然後將其本地轉換爲DataReader。

通過這種方式,本地應用程序無需知道(或關心)它是否在本地或遠程訪問數據。

但是,爲了做到這一點,我需要知道...... 如何在預先存在的DataTable上包裝DataReader?

更新:我的業務邏輯不會保留在webservice中,因爲使用Webservice的DataProvider是可切換的,而不是。 因此,businessLogic將被保留在客戶端應用程序中。

FWIW我正在使用.Net 3.5 SP1

+0

2 Downvotes任何人都在關心評論爲什麼? – 2009-01-26 12:11:01

+0

可能因爲您只聲明您要使用DataReader,因爲您認爲它會幫助您提高性能。有關應用程序設置的更多信息,爲什麼要使用DataReader而不是DataTable以及業務邏輯所在的位置可能會有所幫助。 – 2009-01-26 12:13:10

+0

業務邏輯駐留在客戶端應用程序中。 – 2009-01-26 12:20:24

回答

27

只需在您的DataTable上調用CreateDataReader

-2

你不能。 DataReader和DataTable是兩個不同的東西。

由於DataReader使您能夠以流的形式讀取數據,因此我不明白爲什麼要在客戶端執行此操作。

DataReader通常用於從數據庫中讀取數據並添加邏輯來填充對象或DataTable的列表。因此,最好做大多數業務邏輯,這些業務邏輯與Web服務上的DataTable的構建有關,將其作爲Web服務傳遞給客戶端,並與其他ADO.Net功能一起使用以獲得更多業務邏輯。

也許你可以更具體地說明爲什麼你真的想要一個DataReader?

0

沒有現成的課程可以爲你做到這一點。但是,編寫一個可實現IDataReader的可序列化類並且是現有DataTable的包裝並不難。

編輯: 您可能會發現它更容易從DbDataReader繼承(我認爲,檢查對象資源管理器中的SqlDataReader的基類)。它爲您提供了一些接口實現。但是,是的,它仍然是很多沉悶的代碼。

1

一個DataReader是讀取數據存儲的最快途徑,但僅當滿足特定條件:

  1. 的數據是隻進的方式被讀出。
  2. 數據是隻讀的。

即使這些條件是由你的情況符合,DataReader的代表已連接的數據存儲,這意味着你需要保持你的連接打開整個的DataReader的是在網絡上,直到被調用的方法傳遞時間在另一端返回某種迴應。

因此,我認爲一個活動的DataReader不應該通過各種層和應用程序傳遞。我寧願將數據提取到另一個數據存儲或集合中,然後立即處理DataReader。