2013-05-02 45 views
0

我想從MySQL數據庫返回值的ArrayList。我嘗試了幾個解決方案,但他們沒有我需要的那麼優雅。我的問題:我有一個數據庫中的表可以改變結構(改變表)。我需要一種方法來檢測當前的表結構,然後將數據放入數組列表中,使用正確的類型(不投射到Object)是否有解決這個問題的方法?我不希望邏輯寫在波紋管裏面。C#mysql返回行的列表

IDbCommand sql = dbLink.CreateCommand(); 
sql.CommandText = "SELECT * FROM table WHERE cond"; 

IDataReader reader = null; 

try 
{ 
    reader = sql.ExecuteReader(); 
} 
catch (Exception er) 
{ 
    Log.error ("error executing query"); 
} 

while(reader.Read()) 
{ 
    //dont want like this 
    value = (string)reader["item"]; 
    //logic to implement 
} 


reader.Close(); 
reader = null; 
sql.Dispose(); 
sql = null; 
+1

你應該將你的連接包裝在一個'using ....'中。另外,拋棄'ArrayList',stick到正常的'IEnumerable'或'List',除非你有理由不這樣做。 – Arran 2013-05-02 20:10:03

回答

4

鑑於ArrayList僅僅是將其存儲爲Object,無論如何,你可以使用:

list.Add(reader["item"]); 

那樣只會把責任推不管是怎麼回事,以它從列表中投它之前他們可以做任何有用的事情。考慮一下代碼將消耗這些結果,以及你如何期待它來處理它們。 (我同意Arran的評論 - 你應該使用using聲明,而且,在你完成它們之後,你幾乎從不想將變量設置爲null,你不應該只抓到Exception,你絕對不應該'在拋出一個異常後嘗試使用reader - 你最終會得到一個NullReferenceException。)