C# SQLConnection 池
Posted
技术标签:
【中文标题】C# SQLConnection 池【英文标题】:C# SQLConnection pooling 【发布时间】:2011-05-26 08:50:41 【问题描述】:谁能告诉我如何在 ADO.Net 中进行连接池,我确实需要连接到 3 个独立的数据库。其中 2 个在同一服务器中,另一个在单独的服务器中。
使用代码片段更好..
【问题讨论】:
【参考方案1】:只要您对处理连接有严格要求,默认(至少对于 sql-server)是它会自动工作。在您的示例中,您很可能只有 3 个 基础 连接(每个连接字符串一个)。
但始终确保您的连接已处理完毕,最好使用using
:
using(var conn = new SqlConnection(connectionString))
// use conn
然后即使抛出异常,它也会被释放回池中(以便在下次看到相同的连接字符串时重新使用)。
要禁用池(如果您选择),请在连接字符串中包含Pooling=false;
。
【讨论】:
明确一点,当conn
以这种方式处理时,您不需要conn.Close();
。【参考方案2】:
某些提供商不提供连接池。据我所知,这包括与 Microsoft Access 数据库 (Jet) 和 SQL Server CE(精简版)的连接字符串。
缺少连接池使得数据库访问速度显着变慢。
对于缺少 Jet 池的解决方案是,我在整个程序生命周期内始终打开一个与 Jet 数据库的连接(与推荐的技术相反)。这极大地加快了 .NET 应用程序中的 Jet Access 数据库 SQL 查询,但也仅适用于本地 Jet 数据库;对于网络共享上的 Jet 数据库,我得到相对较快的关于打开文件句柄过多的异常。
对于 SQL Server CE,我目前没有找到解决方案。
【讨论】:
【参考方案3】:不需要特别配置或设置任何东西,让它发生...我见过的大多数问题都是由于人们没有关闭连接或太聪明而引起的
池是根据连接字符串创建的,因此在这种情况下您将拥有三个池
【讨论】:
三个连接还是两个连接?? 每个连接字符串一个。所以即使两个在同一台服务器上,不同的数据库也会使连接字符串不同。以上是关于C# SQLConnection 池的主要内容,如果未能解决你的问题,请参考以下文章
using(SqlConnection connection=new SqlConnection(connectionString))
using (SqlConnection connection = new SqlConnection(connectionString))
TransactionScope 打破 SqlConnection 池?
实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).Server