在这里使用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:如果我们不知道表格中的列数会怎样?
答案 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]);
}
}
}
}