2010-03-07 91 views
2

我使用System.Data.OdbcClient连接到传统的rdbms系统。我想知道传统rdbms系统是否支持连接池?假设我使用连接如下图所示连接池在Ado.net中如何工作?

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

    //perform db operation 

} 

它建立连接,并在每次调用或者来自连接池的时间断开。

回答

2

这一切都取决于在本机上配置连接池的方式。如果在此计算机上有效启用连接池,则所示片段将使用池中的连接(如果可用),并且实际上不需要创建新的连接。

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

有被做了区分:连接池一般处理与DBMS服务器的连接(如果您愿意,则为“SQL会话”)而不是与封装这种连接的对象连接。因此,SQLsessions(相对而言是生产成本最高的元素)被有效地缓存,但每次都会重新创建ADO(或任何对象)。

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

编辑(关于遗留RDBMS等从阿穆布巴克注释]支持体)
使用ODBC,连接池是ODBC层的的特征,而不是各种驱动程序ODBC使用连接到的底层存储。因此,只要具有ODBC版本3.0或更高版本(以及底层驱动程序可供ODBC访问的那么长时间),ODBC就可以为您管理连接池(假设您为其提供必要的配置详细信息)。
使用ODBC,看起来连接池可以通过编程方式进行配置/启用。这并不会使连接池对程序透明的声明无效,只是您可能需要在程序的初始化部分中进行一些调用来设置池,其余的逻辑实际上使用连接保留不变。
参见例如这个MSDN article

+0

是否在ODBC驱动程序中实现连接池?甚至传统的rdbms是否支持连接池? – Amitabh 2010-03-07 15:29:57

+0

@Amitabh:见编辑。具有ODBC的连接池需要ODBC版本3.0或更高版本,但池化逻辑位于ODBC层而不是基础RDBMS驱动程序的级别。 – mjv 2010-03-07 16:42:55

0

它使用连接池,您可以(ans应该)在使用子句中“软关闭”连接,但下次可能会获得已建立的连接。