lc63201590 2022-11-23 11:07 采纳率: 0%
浏览 23

There is already an open DataReader associated with this Connection which must be closed

C#There is already an open DataReader associated with this Connection which must be closed
string constr = "Server=.;user=sa;pwd=*********;database=mydb";
        SqlConnection myCon = new SqlConnection(constr);
        try
        {
            using (myCon)
            {
                myCon.Open();
                Console.WriteLine("数据连接已经打开");
                string sql = "select max(age) from mytable003";
                SqlCommand mycommand = new SqlCommand(sql, myCon);
                int t = 0;
                t = (int)mycommand.ExecuteScalar();
                Console.WriteLine("最大年龄是" + t + "岁");
                myCon.Close();
            }

        }
        catch { }
        finally
        {

            myCon.Close();
            Console.WriteLine("数据库已经关闭");
        }
        Console.ReadKey();
这段代码是运行正常的,接下来上面的代码注释掉,运行下面的代码后出现提示:There is already an open DataReader associated with this Connection which must be closed
string constr = "Server=.;user=sa;pwd=*********;database=mydb";
        SqlConnection myCon = new SqlConnection(constr);
      try
        {
            using (myCon)
            {
                myCon.Open();
                string sql = "select * from mytable003";
                SqlCommand mycommand = new SqlCommand(sql, myCon);
                mycommand.ExecuteReader();
                SqlDataReader mydr;
                mydr = mycommand.ExecuteReader();

                if (mydr.HasRows)
                {
                    Console.WriteLine("该表中存在数据");
                }
                else
                {
                    Console.WriteLine("该表中没有数据");
                }
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
        }
        finally
        {
            myCon.Close();
            Console.WriteLine("数据库已经关闭");
        }

        Console.ReadKey();
所以是第一段代码出现了没有关闭的datareader吗?该怎么处理,网上看了一些东西,但是还是弄不明白,数据库用的是sql server2012
  • 写回答

2条回答 默认 最新

  • 於黾 2022-11-23 11:12
    关注

    已经使用了using 关键字,不需要再执行close方法
    但是你using用错了,应该是
    using(SqlConnection myCon = new SqlConnection(constr))
    不要把定义放到using外面去
    -=-==-
    即使你之前的连接没有关闭,也并不影响你建立另一条连接去连数据库,所以跟上一段代码有没有close没有关系
    何况你是把程序关闭了,改了代码再重新运行的,那所有占用的资源肯定都释放了,不会有任何影响
    我怀疑你代码放的不全,你是不是把第二段代码写循环里了,然后没关闭就又重复执行了myCon.Open();

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月23日

悬赏问题

  • ¥20 macmin m 4连接iPad
  • ¥15 DBIF_REPO_SQL_ERROR
  • ¥15 根据历年月数据,用Stata预测未来六个月汇率
  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
  • ¥15 距离软磁铁一定距离的磁感应强度大小怎么求
  • ¥15 霍尔传感器hmc5883l的xyz轴输出和该点的磁感应强度大小的关系是什么
  • ¥15 vscode开发micropython,import模块出现异常