Connection Pool如何在Ado.net中运行?

时间:2010-03-07 14:19:49

标签: ado.net odbc connection-pooling

我使用System.Data.OdbcClient连接到旧版rdbms系统。我想知道传统rdbms系统是否支持连接池?假设我使用Connection如下所示

using (OdbcConnection con = new OdbcConnection("ConnStr"))
{
    con.Open();

    //perform db operation

}

它是否建立连接并在每次调用它或来自连接池时断开连接。

2 个答案:

答案 0 :(得分:2)

这完全取决于在此计算机上配置连接池的方式。如果在此计算机上有效启用了连接池,则显示的代码段将使用池中的连接(如果可用),并且实际上不需要创建新的[ RDBMS ]连接。

这是关于连接池的好处:它对应用程序是透明的,即你不需要做任何不同的事情,调用单独的API等。

有一个区别:连接池通常处理与DBMS服务器的连接(如果你愿意的话,“SQL会话”)与封装这种连接的对象无关。因此,SQLsessions(相对而言,生成成本最高的元素)被有效地缓存,但每次都会重新创建ADO(或任何对象)。

此外,连接池可确保与SQL Server的连接有效使用,但不保证不会创建新连接(例如,在相对空闲一段时间后,某些连接可能会超时,然后是丢弃并重新创建。)

编辑(在遗留RDBMS等支持上[来自Amitabh的评论])
使用ODBC,连接池是ODBC层的一项功能,是ODBC用于连接底层存储的各种驱动程序。因此,只要您具有ODBC 3.0或更高版本(并且ODBC可以访问基础驱动程序这么长时间),ODBC就可以为您管理连接池(前提是您提供了必要的配置详细信息)。 使用ODBC,似乎可以通过编程方式配置/启用连接池。这并不会使连接池对程序透明的语句失效,只是在程序的初始化部分,您可能需要进行一些调用来设置池,实际上使用连接的其余逻辑保持不变不变。
例如,见MSDN article

答案 1 :(得分:0)

它使用连接池,您可以(并且应该)在一个“软关闭”连接的using子句中使用它,但下次您可能已经建立了连接。