顾名思义  应该是Connect Pool的意思吧在Visual Studio .NET/C#.NET里有这个东西吗?在哪里呀?它有什么用?如果它真是一个“池子”应该有大小吧在哪里设置呢?如果“池子”满了是不是别人就连不上了我的程序了呀?那么我该如何倒掉点水(或者把池子倒干也可以)让别的人能进来???能用代码实现吗?还是在WebConfig里配置??不会还要在SQL数据库里搞点什么吧??!!真郁闷呀晕 ~!~

解决方案 »

  1.   

    I will wait for U  online~~~
      

  2.   

    希望能解答全面一点最好给篇文章 + 示例That's best !!!
      

  3.   

    别人写的一段代码,希望对你有帮助
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;namespace PengeSoft
    {
    /// <summary>
    ///SQL SERVER数据库操作基类(继承该类可能操作数据库)
    /// </summary>
    public class CDbObject
    {
    private string conString;private ECommandType commandType = ECommandType.Text;private SqlConnection sqlConn;/// <summary>
    /// 默认构造函数(从配置文件中读取关键字为connectionString的值作为连接字符串)
    /// </summary>
    public CDbObject ()
    {
    try
    {
    conString = ConfigurationSettings.AppSettings ["connectionString"];
    }
    catch
    {
    conString = string.Empty;
    }sqlConn = new SqlConnection ();
    }/// <summary>
    /// 构造函数(使用连接字符串初始化该项对象)
    /// </summary>
    /// <param name="conString">连接字符串</param>
    public CDbObject (string conString)
    {
    this.conString = conString;
    sqlConn = new SqlConnection ();
    }/// <summary>
    /// 构造函数(使用连接字符串和命令字符串解释类型初始化该项对象)
    /// </summary>
    /// <param name="conString">连接字符串</param>
    /// <param name="commandType">指定如何解释命令字符串</param>
    public CDbObject (string conString, ECommandType commandType)
    {
    this.conString = conString;
    this.commandType = commandType;
    sqlConn = new SqlConnection ();
    }/// <summary>
    /// 构造函数(使用命令字符串解释类型初始化该项对象)
    /// </summary>
    /// <param name="commandType">指定如何解释命令字符串</param>
    public CDbObject (ECommandType commandType) : this ()
    {
    this.commandType = commandType;
    }
            
    /// <summary>
    /// 设置如何解释命令字符串
    /// </summary>
    public ECommandType ECommandType
    {
    get
    {
    return this.commandType;
    }
    set
    {
    this.commandType = value;
    }
    }/// <summary>
    /// 获取或设置数据库连接字符串
    /// </summary>
    public string ConnectionString
    {
    get
    {
    return this.conString;
    }
    set
    {
    if (value == string.Empty)
    {
    throw new Exception ("数据库连接字符串不能为空");
    }this.conString = value;
    }
    }private void Open ()
    {
    try
    {
    sqlConn.ConnectionString = conString;
    sqlConn.Open ();
    }
    catch (SqlException e)
    {
    throw e;
    }
    }private void Close ()
    {
    if (sqlConn.State == ConnectionState.Open)
    {
    try
    {
    sqlConn.Close ();
    }
    catch (SqlException e)
    {
    throw e;
    }
    }
    }private SqlCommand BuildQueryCommand (string procName, params SqlParameter[] arrParam)
    {
    SqlCommand sqlComm = new SqlCommand(procName, sqlConn);
    switch (commandType)
    {
    case ECommandType.StroedProcedure:
    sqlComm.CommandType = CommandType.StoredProcedure;
    break;
    case ECommandType.Text:
    sqlComm.CommandType = CommandType.Text;
    break;
    }if (arrParam != null)
    {
    foreach (SqlParameter param in arrParam)
    {
    sqlComm.Parameters.Add (param);
    }
    }
    return sqlComm;
    }private SqlCommand BuildQueryCommandByReturnValue (string procName, params SqlParameter[] arrParam)
    {
    SqlCommand sqlComm = BuildQueryCommand (procName, arrParam);
    sqlComm.Parameters.Add ("@returnValue", SqlDbType.Int);
    sqlComm.Parameters ["@returnValue"].Direction = ParameterDirection.ReturnValue;
    return sqlComm;
    }/// <summary>
    /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行(默认参数为null) 
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <returns>结果集中第一行的第一列或空引用(如果结果集为空)。</returns>
    public object ExecuteScalar (string procName)
    {
    return ExecuteScalar (procName, null);
    }/// <summary>
    /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。  
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <param name="arrParam">参数数组,如果没有参数则为null</param>
    /// <returns>结果集中第一行的第一列或空引用(如果结果集为空)。</returns>
    public object ExecuteScalar (string procName, params SqlParameter[] arrParam)
    {
                SqlCommand sqlComm = null;
    try
    {
    Open ();
    sqlComm = this.BuildQueryCommand (procName, arrParam);
    return sqlComm.ExecuteScalar ();
    }
    catch (SqlException)
    {
    throw;
    }
    finally
    {
    sqlComm.Dispose ();
    Close ();
    }
    }
      

  4.   

    /// <summary>
    /// 执行数据的查询操作,并返回一个SqlDataReader(默认参数为null)
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <returns>返回SqlDataReader</returns>
    public SqlDataReader ExecuteReader (string procName)
    {
    return ExecuteReader (procName, null);
    }/// <summary>
    /// 执行数据的查询操作,并返回一个SqlDataReader
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <param name="arrParam">参数数组,如果没有参数则为null</param>
    /// <returns>返回SqlDataReader</returns>
    public SqlDataReader ExecuteReader (string procName, params SqlParameter[] arrParam)
    {
    SqlCommand sqlComm = null;
    try
    {
    Open ();
    sqlComm = this.BuildQueryCommand (procName, arrParam);
    return sqlComm.ExecuteReader (CommandBehavior.CloseConnection);
    }
    catch (SqlException)
    {
    throw;
    }
    finally
    {
    sqlComm.Dispose ();
    }
    }/// <summary>
    /// 执行数据的添加、删除、修改操作并返回受影响的行数(默认参数为null)
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <returns>受影响的行数</returns>
    public int ExecuteNonQuery (string procName)
    {
    return ExecuteNonQuery (procName, null);
    }/// <summary>
    /// 执行数据的添加、删除、修改操作并返回受影响的行数
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <param name="arrParam">参数数组,如果没有参数则为null</param>
    /// <returns>受影响的行数</returns>
    public int ExecuteNonQuery (string procName, params SqlParameter[] arrParam)
    {
    SqlCommand sqlComm = null;
    try
    {
    Open ();
    sqlComm = this.BuildQueryCommand (procName, arrParam);
    return sqlComm.ExecuteNonQuery ();
    }
    catch (SqlException)
    {
    throw;
    }
    finally
    {
    sqlComm.Dispose ();
    Close ();
    }     
    }/// <summary>
    /// 执行数据的添加、删除、修改操作并返回受影响的行数和返回值
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <param name="arrParam">参数数组,如果没有参数则为null</param>
    /// <param name="returnValue">返回值</param>
    /// <returns>受影响的行数</returns>
    public int ExecuteNonQuery (string procName, out object returnValue, params SqlParameter[] arrParam)
    {
    SqlCommand sqlComm = null;
    int num;
    try
    {
    Open ();
    sqlComm = this.BuildQueryCommandByReturnValue (procName, arrParam);
    num = sqlComm.ExecuteNonQuery ();
    returnValue = sqlComm.Parameters ["@returnValue"].Value;
    return num;
    }
    catch (SqlException)
    {
    throw;
    }
    finally
    {
    sqlComm.Dispose ();
    Close ();
    }     
    }/// <summary>
    /// 执行数据的查询操作,并返回数据表(DataTable)
    /// </summary>
    /// <param name="procName">存储过程名或SQL语句</param>
    /// <param name="arrParam">参数数组,如果没有参数则为null</param>
    /// <returns>数据表(DataTable)</returns>
    public DataTable ExecuteByDataTable (string procName, params SqlParameter[]  arrParam)
    {
    SqlCommand sqlComm = null;
    DataTable dt = new DataTable ();
    try
    {
    Open ();
    sqlComm = this.BuildQueryCommand (procName, arrParam);
    SqlDataAdapter adapter = new SqlDataAdapter (sqlComm);
    adapter.Fill (dt);
    return dt;
    }
    catch (SqlException)
    {
    throw;
    }
    finally
    {
    sqlComm.Dispose ();
    Close ();
    }     
    }/// <summary>
    /// 利用参数名数组和参数值数组返回参数数组
    /// </summary>
    /// <param name="paramName">参数名数组</param>
    /// <param name="paramValue">参数值数组</param>
    /// <returns>参数数组(SqlParameter)</returns>
    public static SqlParameter[] CreateParameter (string[] paramName, object[] paramValue)
    {
    SqlParameter[] arrParam = null;int num = paramName.Length;if (num > 0)
    {
    arrParam = new SqlParameter [num];
    for (int i=0;i<num;i++)
    {
    arrParam [i] = new SqlParameter (paramName [i], paramValue [i]);
    }
    }
                
    return arrParam;    
    }

    }
      

  5.   

    建议楼主阅读ado.net技术内幕连接缓冲池是提升性能的,默认最大连接数是100,可以设置。具有自动回收资源的功能,但要等到该连接超时之后。你不用放水,你只要在代码中关闭连接,这样下次调用时就可以快速找到你上次的连接,如果没有就初始化一个,直到达到最大连接数。无论如何,连接都是有限资源,所以请节约用水,用完之后一定要关闭,留给别人使用。
      

  6.   

    TO: Truly() 关闭连接难道不是用Close吗?我每次都Close了呀我一般都设置了最大连接数100难道我的程序连接数真的达到了100的上限了?最近程序经常出现:连接数据库失败晕死~!~
      

  7.   

    连接数达到上限说明你的代码有泄漏的问题,寻找所有的连接操作,使用后都关闭,对于可能出现异常的,将关闭操作放置于finally中。Close和dispose都可以释放连接。多次关闭连接不会产生异常。
      

  8.   

    连接池是用来建立一些和db的连接,使用户访问数据库时可以直接使用  
    这些现成的连接。  
    如果不建立连接池,每个用户每一次访问db时都要和db建立一次连接,  
    这样数据库服务器容易产生连接过多的错误,用户也会觉得速度很慢。  
    web  编程,如果使用的是:客户端---web  server---database  server  .  
    这种架构的,建议使用连接池的方法处理web  server  与  database  server  间的  
    通讯。  
      

  9.   

    连接池顾名思义  应该9是Connect Pool的意思吧在Visual Studio .NET/C#.NET里有这个东西吗?在哪里呀?它有什么用?如果它真是一个“池子”应该有大小吧在哪里设置呢?如果“池子”满了是不是别人就连不上了我的程序了呀?那么我该如何倒掉点水(或者把池子倒干也可以)让别的人能进来???能用代码实现吗?还是在WebConfig里配置??不会还要在SQL数据库里搞点什么吧??!!真郁闷呀晕 ~!~
      

  10.   

    ADO.NET已经实现了连接池,所以不用操心了,也不用费心的自己实现。连接池和其他XX池(如线程池)一样,是基于这样的理念:一个数据库连接的创建和关闭需要耗费很多资源和时间,所以我们尽量减少这些操作。当程序需要数据库连接的时候,到连接池中找是不是有现成的空闲的已经开启的数据库连接,如果有就直接给程序,没有才创建一个新的。当程序不要数据库连接了的时候,也不立即把它关闭,而是把它标记为空闲,留待下次使用。对于数据库连接池来说,池子不会满,满的是数据库那边的限制,数据库会要求同时只能保持多少个活动的连接。
      

  11.   

    shuiyueer15([水月儿])
    连接池 并不是,Water Pool,更不能把它当作你家的水缸,:)
    如果你用的连接池来连库的,如果取不出数据,可能是你的连接代码,或是连接配置有问题,
    别人连不上你的程序,可能是你的WEB配置有问题,但不能说明是连接池是问题,
    更不能说明是你家的水缸满;
    当程序需要数据库连接的时候,到连接池中找是不是有现成的空闲的已经开启的数据库连接,如果有就直接给程序,没有才创建一个新的。当程序不要数据库连接了的时候,也不立即把它关闭,而是把它标记为空闲;哪果你每次创建连接都不关闲的话,如果超时的话,他会自动关闲,
    所以说,你家的水缸是不会满的,因为,它下面有个洞,会漏水,
    不过,有限制的数据库哪里,因为他有客户限制的,增加一个客户,就要付一定的Pay。
      

  12.   

    如果你的SQL server的话,你有必要了解这么多麽,你的连接串这样写就支持连接池了!
    Server=127.0.0.1;database=bbs;uid=sa;pwd=sasa;Pooling=true; Connection Reset=false; Min Pool Size=3;Max Pool Size=100
      

  13.   

    用完connection就close,用完dataReader就close,不要等着系统去关闭,去回收垃圾,系统有时候也靠不住的。
      

  14.   

    wait for a perfect answer!I am confuse too!
      

  15.   

    我也出现过这种错误
    把.NET关闭,再打开,就能连接上了5555555555555555
    还好,今天了解了一下链接池呵
      

  16.   

    myheartzhang(乔乔) 的回答应该是比较明白了
      

  17.   

    我实现的通用对象池,及派生出来的数据库连接池:
    http://blog.csdn.net/guanzhongs/archive/2006/03/14/624251.aspx
    http://blog.csdn.net/guanzhongs/archive/2006/03/26/638772.aspx
      

  18.   

    java中,连接池是在应用服务器上配置的,不清楚ado.net是不是内置了对连接池的管理.