2013-05-02 59 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。)