这是什么问题?
我的 数据库 连接字符串写在 web.config里面
我每次 conn.open 的时候,用完也就关掉了
用的sqldataadapter 用完以后也就关掉了
为什么还是出现这种情况??

解决方案 »

  1.   

    在连接字符串里把超时时间设长点试试
    timeout=200
      

  2.   

    CommandTimeout设大点试试
    默认是30秒
      

  3.   


    这是什么问题?
    我的 数据库 连接字符串写在 web.config里面
    我每次 conn.open 的时候,用完也就关掉了
    用的sqldataadapter 用完以后也就关掉了
    为什么还是出现这种情况??
    ————————————————————————————————————————
    说明还是没有关掉。
      

  4.   

    那大家给我个代码,看看你们是怎么关掉的?
    对了,那个 sqlcommand 对象 用完了也得手动关掉吗
      

  5.   

    对了,我用到存储过程的时候 
    用了 SqlParameter 这个对象,这个我没关闭,这个不用关闭吗?
      

  6.   

    /// <summary>
        /// Create DataBase
        /// </summary>
        /// <returns>Is Successful?</returns>
        private bool CreateDataBase(string SqlFileName, string connStr)
        {
            if (NeedBreak)
                return false;        // T-SQL文件名
            string fileName = MapPath(string.Format("App_Data\\{0}.sql", SqlFileName));
            // 超时时间
            int timeout = 600;        bool Issuccess = true;
            SqlConnection conn = null;
            try
            {
                Add_Info(String.Format("启用{0}建立过程...", SqlFileName));            // read file
                using (StreamReader sr = new StreamReader(new FileStream(fileName, FileMode.Open)))
                {
                    Add_Info("建立数据...");                // 创建一个新的链接
                    conn = new SqlConnection(connStr);                conn.Open();                while (!sr.EndOfStream)
                    {
                        StringBuilder sb = new StringBuilder();
                        SqlCommand cmd = conn.CreateCommand();                    while (!sr.EndOfStream)
                        {
                            string s = sr.ReadLine();
                            if (s != null && s.ToUpper().Trim().Equals("GO"))
                            {
                                break;
                            }                        sb.AppendLine(s);
                        }                    // 执行T-SQL语句
                        cmd.CommandText = sb.ToString();
                        cmd.CommandTimeout = timeout;                    cmd.ExecuteNonQuery();
                    }            }
                Add_Info(string.Format("结束{0}数据建立过程...", SqlFileName));
            }        catch (Exception ex)
            {
                bWaitRes = 3;
                Add_Info(String.Format("建立数据库中出错: {0}", ex.ToString()));
                Issuccess = false;
            }
            finally
            {
                // 关闭链接
                if (conn != null)
                {
                    try
                    {
                        conn.Close();
                        conn.Dispose();
                    }
                    catch (Exception e)
                    {
                        bWaitRes = 3;
                        Add_Info(String.Format(@"关闭链接失败:{0}", e.ToString()));
                        Issuccess = false;
                    }
                }
            }
            return Issuccess;
        }
      

  7.   

    DataReader犯的错...
    总结一小下:
    1.ExecuteReader(CommandBehavior.CloseConnection)加上CommandBehavior.CloseConnection;
    2.最好不要返回一个DataReader,读完数据库close,然后返回一个DataTable或List<>,或其它
    3.一个页面最好少new sqlconnection
    4.配置好服务器
    5.重写DataReader....
      

  8.   

    con关闭了,数据库的所有连接就都关闭了,不是SqlParameter的原因.找找别的吧
      

  9.   

    我用
     using(objconn = new SqlConnection(....)){}
     using(cmd = new SqlCommand(....)){}
     using(adapter= new SqlDataAdapter(....)){}这样我多余么?呵呵,我把用完能释放掉的资源全释放掉了
    还有 我新建一个  dataSet 用完后,用不用 手动 ds.clear()?
      

  10.   

    程序里用了SqlConnection.Open(),但没有用到SqlConnection.Close()
      

  11.   

    解决方案一我想原因可能是并发操作。DataReader是独占连接的,就是说你的程序可能设计上有问题。比如说最大连接设100,假设有100个人同时使用DataReader正在读取数据库内容,那么当第101人读取的时候,连接池中的连接已经没有了,就会出现上面的错误。DataReader是独占连接的,每个DataReader都要占用一个连接。当然这个情况是偶尔出现的,所以会很长时间出现一次,因为只有同时有超过连接池最大连接数量的并发操作才会发生。而且你加大并发数量只能暂时缓解问题,如果你加大到200个并发连接,如果有201人同时操作怎么办?你说了你使用Connection对象的Close()方法,这是不行的,因为Close()方法仅仅是关闭连接,但这个连接没有释放,还是被这个对象占用,要释放必须使用Connection的Dispose()方法显式释放连接才可以,否则这个对象占用的连接只能等到垃圾收集的情况下才能被释放。这种情况肯定会出现“超时时间已到”的错误。解决方法:
             1 修改几个关键页面或访问比较频繁的数据库访问操作,使用DataAdapter和DataSet来获取数据库数据,不要使用DataReader。
             2 在访问数据库的页面上使用数据缓存,如果页面的数据不是经常更新(几分钟更新一次)的话,使用Cache对象可以不用访问数据库而使用缓存中的内容,那么可以大大减少连接数量。
             3 修改代码,把使用Connection对象的地方都在Close()后面加上Dispose()调用。
             4 建议对数据库操作进行大的修改,建立自己的数据库操作代理类,继承System.IDisposable接口,强迫释放资源,这样就不会出现连接数量不够的问题了。解决方案二解决方法(*):WEB.config 里面:在数据库连接加 Max Pool Size = 512;server=local;uid=;pwd=;database=2004;Max Pool Size = 512;">一劳永逸。解决方案三估计是连接(Connection)对象没有Close。倒是不必Dispose,而DataReader用完后应该关闭,但不关闭也没问题,只是不关闭的话此连接对象就一直不能用,只要你最终关闭了连接对象就不会出问题。   
        
       连接对象在Open后的操作都放在try块中,后面跟一个finally块:conn.Close();
      

  12.   

    你说了你使用Connection对象的Close()方法,这是不行的,因为Close()方法仅仅是关闭连接,但这个连接没有释放,还是被这个对象占用,???????
    好错了吧,是没有释放,但是又放回链接池了,201号用户可以用了。你是不是热迷乎了???
      

  13.   

    本想问SQL版的,但一想是ASP.net中的应用就来这了。看来,不知道的人还挺多的,心理有了安慰。