获取整个表 - MySQL错误

时间:2014-09-03 06:10:18

标签: c# mysql sql

在这里使用C#和MySQL(Visual Studio 12和MySQL workbench 6.1)。

我正在尝试将整个表格放到列表中。

这是我到目前为止所做的:

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并尝试获取toString arrList时,我得到indexOutOfBounds例外。 (我的表emp中有1条记录。)

谢谢!

编辑:我正在尝试将整个表格(按顺序)放入列表中。这是正确的做法吗?

编辑2:如果我们不知道表格中的列数会怎样?

2 个答案:

答案 0 :(得分:1)

更改为:

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

因为"* "不是valis列名。替代方案,您可以使用索引

arrList.Add(reader[0].ToString());
每列的

列出arrList = new List();

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))
    }
}

答案 1 :(得分: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]);
         }
      } 
   }
}