c# mysql - 已经有一个与此连接关联的打开的数据读取器,必须先将其关闭

标签 c# mysql

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/

相关文章:

c# 通过引用或通过值

sql - 为什么这个 mysql 表在日期时间字段中产生 NULL?

MySQL:大表需要join,如何拆分优化?

mysql - SUBSTRING() 中不允许列值作为 pos 或 len ? (错误1054未知列)

mysql - 查找具有结尾与 MYSQL 中另一个表的列匹配的列的所有行

php - WordPress - 删除导航菜单项时,链接的页面也会删除

c# - Linux 上的 Mono 和缺少方法异常

c# - 如何使用 OpenXml 2.0 将任何文件类型嵌入到 Microsoft Word 中

c# - Web Api 2 + EF6 - 构建 DTO

c# - 从联接映射 - 类型 'CarDTO' 出现在单个 LINQ to Entities 查询中的两个结构不兼容的初始化中