一、什么是连接池
连接池是DATA Provider提供的一个 机制,使得应用程序使用的连接保存在连接池里,而避免每次都要完成建立/关闭物理连接的完整过程。
应用程序打开和关闭连接时,一般只需要和连接池“打交道”
二、建立连接池方法
Pooling=true;表示启用连接池; Max Pool size=10;表示连接池里最大允许的连接数(可以自己定义)
Min Pool size=5;表示连接池里最小允许的连接数,第一次访问数据库时会马上创建5个连接,以后根据并发的需要自动增加连接数,但最多不超过规定的10个,如果超过10个并发请求的时候,则在连接池之外创建连接对象,在连接池以外创建的连接关闭后,会释放连接资源。
连接池是DATA Provider提供的一个 机制,使得应用程序使用的连接保存在连接池里,而避免每次都要完成建立/关闭物理连接的完整过程。
应用程序打开和关闭连接时,一般只需要和连接池“打交道”
二、建立连接池方法
在app.config中连接字符串后添加Pooling=true;Max pool size=10;Min pool size=5
<connectionStrings >
<add name ="connString" connectionString ="Server=.;DataBase=DB;Uid=sa;Pwd=123456;Pooling=true;Max Pool Size=10;Min Pool Size=5"/>
</connectionStrings>
Pooling=true;表示启用连接池; Max Pool size=10;表示连接池里最大允许的连接数(可以自己定义)
Min Pool size=5;表示连接池里最小允许的连接数,第一次访问数据库时会马上创建5个连接,以后根据并发的需要自动增加连接数,但最多不超过规定的10个,如果超过10个并发请求的时候,则在连接池之外创建连接对象,在连接池以外创建的连接关闭后,会释放连接资源。
三、SQLServer中查看连接对象
方法:exec sp_who
四、连接池使用的注意问题:
1、在winform程序中,要求连接字符串必须完全一样,这样不同应用程序可以共享数据库中连接池的连接对象,如果应用唾弃的连接字符串不同,则数据库为每个程序创建一个连接池,一定要避免这样做。2、在Web应用程序中,因为连接字符串在服务器端只有一个,所以不会出现上面的问题。
五、在SQLHelper中连接池的说明
public static SqlDataReader GetReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
/*1、当使用连接池以后,执行open()方法的时候,系统会从连接池中
提取一个现有的连接对象过来,这时候打开的是一个逻辑连接
2、如果连接池中的连接对象都被占用了,则会创建一个新连接对象
*/
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
/*
1、当使用Close()方法关闭连接的时候,系统会把连接对象放回
连接池,这时候关闭的是一个逻辑连接。
2、如果是独立创建的对象,则会被GC翻译掉。
*/
conn.Close();
string errorInfo = "调用GetReader(string sql)方法时发生错误,具体信息:" + ex.Message;
//将异常信息写入日志
WriteLog(errorInfo);
throw new Exception(errorInfo);
}
}