2014-09-03 35 views
0

在这里使用C#和MySQL(Visual Studio 12和MySQL工作台6.1)。获取整个表 - MySQL错误

我想将整个表格放入列表中。

这是我到目前为止有:

List<Object> arrList = new List<Object>(); 

string str = @"server=localhost;database=test;userid=root;password=asd;"; 


MySqlConnection con = new MySqlConnection(str); 
con.Open(); 


MySqlCommand cmd = new MySqlCommand(query, con); 

cmd.CommandText = query; 
MySqlDataReader reader = cmd.ExecuteReader(); 

while (reader.Read()) 
{ 
    arrList.Add(reader["* "]); 
} 

当我通过SELECT * FROM emp;query,并得到arrList的toString,我得到一个indexOutOfBounds例外。 (我的表格emp有1记录在里面。)

谢谢!

编辑:我试图让整个表(按顺序)成列表。这是正确的方法吗?

编辑2:如果我们不知道表中的列数,该怎么办?

+0

你的'emp'表有多少列?只有一个? – 2014-09-03 06:17:30

+0

2栏。我想顺序去。像[row1,col1]然后[row1,col2]然后[row2,col1]然后[row2,col2]等等...**编辑**我希望它以上述方式适用于任何表格。所以我们不知道有多少个田地。 – john 2014-09-03 06:18:50

+0

这些列的类型是什么? – 2014-09-03 06:21:37

回答

1

更改为:

while (reader.Read()) 
{ 
    arrList.Add(reader["myColumnTitle"].ToString()); 
} 

原因"* "不是VALIS列名。替代可以使用索引

arrList.Add(reader[0].ToString()); 

每个柱:

列表arrList =新列表();

string str = @"server=localhost;database=test;userid=root;password=asd;"; 
string query = "SELECT * FROM emp"; 

MySqlConnection con = new MySqlConnection(str); 
con.Open(); 


MySqlCommand cmd = new MySqlCommand(query, con); 

cmd.CommandText = query; 
MySqlDataReader reader = cmd.ExecuteReader(); 

while (reader.Read()) 
{ 
    for (int i = 0; i < reader.FieldCount; i++) 
    { 
     var value = reader[i]; 
     arrList.Add(Convert.ToString(value)) 
    } 
} 
+0

使用此方法是否无法将整个表(按顺序)获取到列表中? (不只是1个字段) – john 2014-09-03 06:15:29

+0

字符串中的所有数据? - >从emp中选择Column1 + Column2 ...关于数据类型的Carfull。他们必须是相同的! – 2014-09-03 06:18:12

+0

如果列数不知道怎么办? – john 2014-09-03 06:20:13

1

reader.Read()通过行读取你的结果行。这意味着在这段while语句中,您需要阅读查询的所有列。

当您编写"* "时,您的阅读器会查找您没有的名为*的列。 MySqlDataReader不能理解为您可以在SQL查询中编写*时读取所有列。

这应该工作。

while (reader.Read()) 
{ 
    arrList.Add((string)reader[0]); 
    arrList.Add((string)reader[1]); 
} 

如果你真的不知道有多少个字段,你MySqlDataReader有,你可以使用SqlDataReader.FieldCount property

获取当前行中的列数。

所以你的代码可以像;

while (reader.Read()) 
{ 
    for(int i = 0; i < reader.FieldCount; i++) 
    { 
     arrList.Add((string)reader[i]); 
    } 
} 

还使用using statement来处置您的数据库连接和对象;

using(MySqlConnection con = new MySqlConnection(str)) 
using(MySqlCommand cmd = con.CreateCommand()) 
{ 
    ... 
    ... 
    using(MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
     for(int i = 0; i < reader.FieldCount; i++) 
     { 
      arrList.Add((string)reader[i]); 
     } 
     } 
    } 
}