Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#mysql返回行列表_C#_.net_Mysql Connector - Fatal编程技术网

C#mysql返回行列表

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

我想从mysql数据库返回值的ArrayList。我尝试过几种解决方案,但它们没有我需要的那么优雅。我的问题是:数据库中有一个可以改变结构的表(ALTERTABLE)。我需要一种方法来检测当前的表结构,然后将数据放入具有正确类型的数组列表中(不强制转换为对象)。有什么解决方案吗?我不想要里面写的逻辑

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可操作的
列表
,除非您有理由不这样做。