OpenSqlConnection();            
            OleDbCommand cmd = new OleDbCommand(p_sSqlString, l_sqlConnection);
            ddr = cmd.ExecuteReader(CommandBehavior.CloseConnection);用asp.net + access做了个网站,出现上传资料后,大约2个小时左右后,在正常页面上会出问题,就是上面代码第2行会表明连接是没有打开的,而出现问题。上传过程后,会关闭连接。连接是写到一个单独的类里面。这个类的实例是各个页面类的私有成员。上传页面和显示页面不是一个页面。按理连接也是不该相互影响的,但是现实确实出现上传资料后,大约两个小时会出现上面代码第2行会表明连接是没有打开的情况。
求助啊。分不多,见谅。

解决方案 »

  1.   

    l_sqlConnection最好别声明为static类型的。
      

  2.   

    OpenSqlConnection();方法里的connection不是new出来的?
      

  3.   

    不是,就是
                  try
                {
                    l_sqlConnection.Open();
                }
                catch
                {
                }
    l_sqlConnection就是一个连接。在类里是这么声明的
              private OleDbConnection l_sqlConnection = new OleDbConnection();
            private string l_sSqlconnectionString = ConfigurationManager.AppSettings["ConnectionString"];
      

  4.   

    你的render 关了它就关了。这只能说明reader 已经关闭了。
    你可以调试下。你读完文件后就关闭了,但你是不是还在做其他操作。
      

  5.   

    我怎么记得reader不支持关闭着读数据的?
    我估计是这个CommandBehavior.CloseConnection的问题
    你试试在使用reader以后,自己控制关闭连接try
    {
      excuteReader();
    }
    finally
    {
       conn.close();
    }
      

  6.   

    在编历reader返回的数据集的过程中,好像是要保持conn一直是连接状态的。
    你取得了这个ddr,然后一行一行读的时候,conn要保持连接。
    这个CommandBehavior.CloseConnection可以智能到知道你什么时候用完了这个ddr了,然后关闭连接吗?
      

  7.   

    MSDN上是这么说的,但语焉不详。
      

  8.   

    你做个log吧,建立连接的那个catch里什么也不写,怎么找问题呢
      

  9.   

    我感觉LZ的问题是:你第一次和数据库交互的时候打开连接,但是没有关闭。第二次和数据库交互的时候会出现异常,跳到catch强制执行关闭。第三次和数据哭交互的时候就报连接没有打开!所以你在代码里找看那块和数据库交互完后没有关闭连接!
      

  10.   

    1.conn不要使用静态
    2.尽量少用datareader,虽然某些高手会告诉你dataTable内部也用了datareader,但是他一遍快速扫描完了就立刻断开了。如果你自己的代码,在处理复杂的玩意的时候没有立刻释放conn,那么情况就悲剧了,比如某些级联查询,第一个datareader在循环的同时,又在不断的根据条件开启其他的dr,尤其是为了省事公用了同一个conn,那线程池就占用严重了所以静态,datareader不是可以用,而是你的自己明确的知道怎么控制才不出问题的情况下可以用,所以对于一般人我倒是建议datatable比较健壮
      

  11.   

    conn不是静态的。打开之后都关闭了。大家看看,有没有这种可能:access本身因为因为某些原因导致连接无效。因为出问题时,一般是插入或删除后两三个小时的时候,而不是当时就出现问题。
      

  12.   

    using(var con=getConection())
    {
       con.open();
       leDbCommand cmd = new OleDbCommand(p_sSqlString, con);
    }反正一般要释放con和reader
    特别是reader
      

  13.   

    就是对数据读取,都采用单独建立连接,打开,关闭。取消了对数据库读取建立的类。
    麻烦,还难看。但是毛病没了。
    个人猜测,是对asp.net的机理还是没搞懂。不像一般程序,从哪开始,命名空间、类怎么影响都很清楚。asp.net之间类的实例之间会有什么,不完全清楚。