2013-06-27 23 views
1

我正在尋找存儲OleDBDataReader的讀取的最佳做法。基本上我希望它保留像讀者一樣的字典[「列」]。我正在編寫一個返回由「行」組成的數據結構的API。我覺得必須有比創建一個字典ArrayList更好的解決方案,但我似乎無法找到這個「最佳實踐」。.NET OleDBDataReader存儲讀取查詢

下的代碼是從我目前的項目採取

using (var commandToQueryDB = new OleDbCommand(query)) 
{ 
    commandToQueryDB.Connection = Connection; 
    Connection.Open(); 
    var reader = commandToQueryDB.ExecuteReader(); 
    while (reader.Read()) 
    { 
      //Insert reader's read in some sort of data structure 
    } 
} 

我希望能夠通過查詢迭代,然後訪問每個查詢的字典(如查詢[「DistrictName」如果我有以DistrictName作爲列的表)

+0

首先,這可能應該移動到codereview,因爲它的工作原理。其次,爲什麼不把數據放入對象中,然後將其存儲在列表中。然後,您可以使用linq過濾來獲得您想要的任何信息 –

+0

因爲此API用於可能不知道Schema的數據庫。 –

回答

1

閱讀器是一個「管道」,而不是「桶」 - 閱讀器API不適用於斷開連接的數據。爲此,它取決於您是否知道數據的模式。

如果你在編譯時知道模式,那麼填充一個類型化的類模型 - 只要List<Foo>會很好地做。有些工具可以使這個更簡單,爲您處理成員羣體等; 「精靈」突然想起(儘管我有偏見)。

如果你做不是提前知道架構,那麼DataTable可能是合適的。我通常不會推薦它,但它在這裏完成這項工作。剛:

table.Load(reader); 

足以填充DataTable包括架構(列)和值(行/細胞)。

+0

Datatable的缺點是什麼?你爲什麼不推薦它? –

+0

@Alexander如果你知道模式,使用簡單的對象模型的開銷要少得多。 DataTable增加了您可能不需要的複雜性,抽​​象性和靈活性以及功能*。如果這不是性能關鍵領域,那麼您可能會放棄它。另外,請注意,DataTable本質上沒有很好的類型 - 編譯器和IDE將無法幫助您做到這一點。 –

+0

@Alexander「有類型的數據集/數據表」這樣的東西,但是爲了愛這個世界上所有正派的人,不要去那裏 - 那些壞事假裝好。如果一個類型化數據表是一個選項,那麼普通的poco將是一個更好的選擇。 –