当前位置:编程学习 > C#/ASP.NET >>

下面的代码怎样老是提示,"已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"那里出错了呢?

提示:已有打开的与此命令相关联的 DataReader,必须首先将它关闭。

public DataSet GetClassTop() 
{
            DataSet ctds = new DataSet();
            try {
                
                conn.Open();
                SqlCommand cmd = new SqlCommand("Index_ClassTop", BaseClass.conn);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter ctada2 = new SqlDataAdapter(cmd);
                ctada2.Fill(ctds);
                conn.Close();


            }catch(Exception ex)
            {
                Log.WriteLog(ex.Message);
                ctds = null;
            }
            return ctds; 
}  --------------------编程问答-------------------- conn在哪定义的,应该有个DataReader在占用它 --------------------编程问答-------------------- 一个DataReader必须占用一个Connection,出现这样的提示,应该是你在其它地方打开的DataReader打开后没有关闭.

仔细检查你的代码,确保每一个DataReader都在使用完后调用了DataReader.Close()方法. --------------------编程问答-------------------- 整个项目都没有使用DataReader 这种方法.

都是采用上面的方式得到数据的 --------------------编程问答--------------------
"conn.Open()"??????? !!!!

you need't to open connection when excute SqlDataAdapter.Fill(DataSet).

assume you haven't open connection outside,
then Try like:

public   DataSet   GetClassTop()   

          DataSet   ctds   =   new   DataSet(); 
          try   { 
                                
                  //conn.Open(); 
                  SqlCommand   cmd   =   new  qlCommand("Index_ClassTop",   BaseClass.conn); 
                  cmd.CommandType   =   CommandType.StoredProcedure; 
                  SqlDataAdapter   ctada2   =   new   SqlDataAdapter(cmd, conn); //note here
                  ctada2.Fill(ctds); 
                  //conn.Close(); 


          }catch(Exception   ex) 
          { 
                  Log.WriteLog(ex.Message); 
                  ctds   =   null; 
          } 
          return   ctds;   
}   
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,