在这里使用C#和MySQL (Visual 12和MySQL工作台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 of arrList时,我会得到一个indexOutOfBounds异常。(我的表emp中有1条记录。)
谢谢!
编辑:,我试图将整个表(按顺序排列)放到列表中。这样做对吗?
编辑2:,如果我们不知道表中的列数怎么办?
发布于 2014-09-03 06:12:34
改为:
while (reader.Read())
{
arrList.Add(reader["myColumnTitle"].ToString());
}因为"* "不是valis列名。替代您可以使用索引
arrList.Add(reader[0].ToString());每一栏:
List arrList =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))
}
}发布于 2014-09-03 06:20:53
reader.Read()逐行读取结果。这意味着在这个while语句中,您需要读取查询的所有列。
当您编写"* "时,您的读者会查找一个名为*的专栏,您没有这个专栏。MySqlDataReader无法理解在编写*时读取所有列,就像在sql查询中一样。
这应该能行。
while (reader.Read())
{
arrList.Add((string)reader[0]);
arrList.Add((string)reader[1]);
}如果您真的不知道MySqlDataReader有多少字段,可以使用 property。
获取当前行中的列数。
所以你的代码可以像;
while (reader.Read())
{
for(int i = 0; i < reader.FieldCount; i++)
{
arrList.Add((string)reader[i]);
}
}还可以使用 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]);
}
}
}
}https://stackoverflow.com/questions/25637380
复制相似问题