private void populateTreeView(TreeView tv)
{
try
{
String query = "select * from year_grade order by sort asc";
cmd = new MySqlCommand(query, conn);
dr = cmd.ExecuteReader();
String query1 = "";
while (dr.Read())
{
TreeNode node = new TreeNode(dr["year_grade"].ToString());
query1 = "select * from stud_year where year_grade='" + dr["year_grade"] + "' ";
cmd1 = new MySqlCommand(query1, conn);
dr = cmd1.ExecuteReader();
while (dr.Read())
{
node.Nodes.Add(dr["stud_year"].ToString());
tv.Nodes.Add(node);
}
}
conn.Close();
dr.Close();
}
catch (Exception n)
{
Console.Write(n.Message);
MessageBox.Show(n.Message);
}
}
what's wrong with this codes. the messagebox from the catch block says " there is already an open datareader associated with this connection which must be closed first". please help guys...
最佳答案
让它在连接之前关闭 Datareader,而不是像您的代码中那样关闭 Datareader。声明一个新的数据读取器和一个新的命令。
反转这个:
关闭博士();
conn.Close();
用这个改变你的代码:
private void populateTreeView(TreeView tv)
{
try
{
String query = "select * from year_grade order by sort asc";
cmd = new MySqlCommand(query, conn);
dr = cmd.ExecuteReader();
String query1 = "";
while (dr.Read())
{
TreeNode node = new TreeNode(dr["year_grade"].ToString());
query1 = "select * from stud_year where year_grade='" + dr["year_grade"] + "' ";
cmd2 = new MySqlCommand(query1, conn);
dr2 = cmd2.ExecuteReader();
while (dr2.Read())
{
node.Nodes.Add(dr2["stud_year"].ToString());
tv.Nodes.Add(node);
}
dr2.Close();
}
dr.Close();
conn.Close();
}
catch (Exception n)
{
Console.Write(n.Message);
MessageBox.Show(n.Message);
}
关于c# mysql - 已经有一个与此连接关联的打开的数据读取器,必须先将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24970315/