C#mysql返回行列表
我想从mysql数据库返回值的ArrayList。我尝试过几种解决方案,但它们没有我需要的那么优雅。我的问题是:数据库中有一个可以改变结构的表(ALTERTABLE)。我需要一种方法来检测当前的表结构,然后将数据放入具有正确类型的数组列表中(不强制转换为对象)。有什么解决方案吗?我不想要里面写的逻辑C#mysql返回行列表,c#,.net,mysql-connector,C#,.net,Mysql Connector,我想从mysql数据库返回值的ArrayList。我尝试过几种解决方案,但它们没有我需要的那么优雅。我的问题是:数据库中有一个可以改变结构的表(ALTERTABLE)。我需要一种方法来检测当前的表结构,然后将数据放入具有正确类型的数组列表中(不强制转换为对象)。有什么解决方案吗?我不想要里面写的逻辑 IDbCommand sql = dbLink.CreateCommand (); sql.CommandText = "SELECT * FROM table WHERE cond"; IDat
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;
鉴于
ArrayList
只是将其存储为Object
,您可以使用:
list.Add(reader["item"]);
这只会让那些将要从列表中获取它的人在他们能够做任何有用的事情之前就有责任将它抛出。考虑任何代码都将使用这些结果,以及您希望它如何处理这些结果
(不过,我同意Arran的评论-你应该使用
和语句。而且,你几乎不想在处理完变量后将它们设置为null,你不应该只捕获异常,也绝对不应该在抛出异常后尝试使用读取器
,你只会得到null。)ReferenceException
)鉴于ArrayList
将其存储为对象,您可以使用:
list.Add(reader["item"]);
这只会让那些从列表中获取结果的人在他们做任何有用的事情之前就有责任将其强制转换。请思考任何代码将使用这些结果,以及您希望它如何处理这些结果
(不过,我同意Arran的评论-你应该使用和语句。而且,你几乎不想在处理完变量后将它们设置为null,你不应该只捕获异常,也绝对不应该在抛出异常后尝试使用读取器
,你只会得到null。)参考异常
)你应该使用….
将你的连接包装在中。此外,抛弃数组列表
,坚持正常的IEnumerable
或列表
,除非你有理由不这样做。你应该使用….
将你的连接包装在中。此外,抛弃数组列表
,坚持正常的IEnum可操作的
或列表
,除非您有理由不这样做。