相关知识:
- 连接池的意义:
- 应用程序往往涉及大量的,并发的数据访问操作
- 数据库服务器能够同时维系的连接数量非常有限。如果某个数据库访问操作不及时关闭连接,就会减少其他调用对数据库访问的机会。因此,一般需要尽可能晚的打开连接,尽可能早的关闭连接
- 反复的创建和销毁连接对象,或者反复的打开和关闭实际的连接(从应用程序到数据库服务器,可能跨网络),其开销是比较大的,也是不划算的
- 采用连接池,在池中缓存若干个链接对象。如果有调用需要使用连接,则从池中取出一个;调用完成后,并不销毁连接,而是将连接放回池中,供其它调用使用
- 这样,便大大减少了创建、销毁对象以及重建远程连接的开销
- 配置ADO.NET连接池:
- 在一个应用程序中,一个连接字符串对应一个连接池。不同的连接字符串对应着不同的连接池(即便只是大小写不同,或者某个字符差异)。尽量不要子一个应用程序中创建太多的连接池
- 不同的应用程序,即使连接字符串相同,也对应着不用的连接池
- 连接字符串中指定 MaxPoolSize / MinPoolSize 属性,可以指定池中最大以及最少容纳的连接对象数量
Server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=rootMaxPoolSize=10;MinPoolSize=3
上述连接字符串将导致连接池中至少保持3个连接对象;如果3个不够用的话,则最多可以创建至10个对象
- 调用连接对象的Close()函数,实际上是将该连接对象放回池中以便重用
- 使用ConnectionStrings配置节:
- 如果在代码中多出直接定义连接字符串,往往会造成细微的字面差异,这将导致多个连接池的创建
- 此外,连接字符串中数据库的名称由可能发生变化,直接卸载代码中,将会导致未来不得不重新编译代码
- .NET提供了应用程序配置文件,其中的<ConnectionStrings>可以用于在代码外定义连接字符串
- 在程序内通过ConfigurationManager类的ConnectiongStrings静态属性,可以获得在配置文件中定义的连接字符串
代码示例:
- App.Config文件:
<connectionStrings> <add name="db" connectionString="server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root;"/> </connectionStrings>
- 在代码中访问连接字符串:
string strConn = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
(要先添加System.Configuration.dll的引用,以及System.Configuration命名空间)