我的网站,只要访问量稍微大一点,就总出现DataReader未关闭的错误,不回收进程的话,过个几分钟,它自己有会好。请问是啥问题呢,我仔细检查了N遍代码,所有的DataReader都有Close(),数据库连接数也是设的最大,不知道为什么原因。请回答一些针对问题实际点的解决方案。不要说一些让我换成DataSet之类的无用回答,我只想知道当前情况下该怎么解决掉。谢谢了!

解决方案 »

  1.   

    每次用完后,不仅DataReader要Close,Connection也要Close。另外同一个Connection下,当DataReader处于打开状态时,不能再执行其他SQL操作数据库,因为当前连接已被占用。
      

  2.   

    ExecuteReader(CommandBehavior.CloseConnection);
    CommandBehavior.CloseConnection 枚举会在关闭DataReader时,也会自动关闭Connection
      

  3.   

    本帖最后由 net_lover 于 2012-05-18 08:54:38 编辑
      

  4.   

    咦··还真是··我的DBHelper是静态方法为主
    老孟啊··这种DBHelper经常调用的类,写成非静态的比较好咯?
      

  5.   

    没有一条有价值的回答吗?手动Close、using、CommandBehavior.CloseConnection 3个都用上了,Connection是更不用说了,当然是关闭了,不关闭就不会自动恢复了,现在是提示一下错误,一会又会自动恢复,整个项目没有static方法。这些问题我都没解决的话,也不会来这求助了。
      

  6.   

    估计你的关闭是直接关闭的关闭方式  try
                {
                    //查询数据
                }
                catch
                {
                    throw;
                }
                finally
                {
                    //请在这里关闭连接
                    //请这里关闭Reader
                }
      

  7.   

    静态方法没有问题
    但是静态成员就会有并发问题
    比如SqlConnection、SqlCommand之类的,避免写成static,除非你能保证它们永远不会线程冲突另外,如7楼所说,如果出现异常,你的Close指令可能执行不到,所以要try,在finally里关闭
    Reader和连接
      

  8.   

    用using等效于try finally去关闭