我使用System.Data.OdbcClient连接到旧版rdbms系统。我想知道传统rdbms系统是否支持连接池?假设我使用Connection如下所示
using (OdbcConnection con = new OdbcConnection("ConnStr"))
{
con.Open();
//perform db operation
}
它是否建立连接并在每次调用它或来自连接池时断开连接。
答案 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子句中使用它,但下次您可能已经建立了连接。