.NET ODBC连接池技术

3

我这样打开一个连接:

Using conn as New OdbcConnection(connectionString)
    conn.Open()
    //do stuff
End Using

如果启用了连接池,连接不会被物理关闭,而是释放到池中并将被重复使用。如果禁用连接池,则连接将被物理关闭。
有没有办法以编程方式知道连接池是否启用?以及当前在池中打开的已使用和未使用的连接数量?
编辑:我需要从程序内获取此信息,我不能在部署程序的每台计算机上手动检查它。
3个回答

3

MSDN提供了关于此问题的详细指南,点击此处查看。

从数据源管理员配置连接池

[省略]

或者,您可以在运行提示符中启动ODBC数据源管理员。在任务栏上,单击开始,单击运行,然后键入Odbcad32。

在ODBC 3.5及更高版本中,管理连接池的选项卡在ODBC数据源管理员对话框中找到。

从注册表配置连接池

对于ODBC核心组件版本3.5之前的版本,您需要直接修改注册表以控制连接池CPTimeout值。

连接池始终由数据服务器软件处理,这也是.NET中不必担心它的原因(例如,这就是为什么在使用SQL Server时应始终使用SqlConnection的一部分-因为它启用了连接池)。

更新

在Vista上,只需在开始菜单中键入“ODBC”,即可找到该应用程序。

根据OP澄清后的更新

要确定每台计算机是否启用了连接池,请查看MSDN指南,我认为您最好检查注册表值(有关注册表访问指针,请参见此文章)。

但是,除非客户机真的很差,否则我可能甚至不会费心。据我所知,默认情况下启用它,并且在客户机上打开连接(根据我的经验)从来没有成为大问题。只有在打开了大量连接时才会变得重要。


有没有办法从程序中完成这个操作?.NET框架中没有保存这些信息的类吗? - Laurent
我不确定,因为我从未尝试过。我使用SQL Server工作,并且它“只是发生了”...您可以尝试计时连接打开所需的时间(第一次打开较慢),然后在规定时间内将其关闭并重新打开(第二次会更快)。 - Rob Cooper

1

看起来你可以直接读取这个注册表键:

[HKEYLOCALMACHINE]\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout

(或者类似的变体,取决于你的操作系统和用户账户)。如果值为0,则连接池被禁用。如果它的值大于0,则启用了连接池。

参见:

http://msdn.microsoft.com/en-us/library/ms810829.aspx

我不确定如何获取打开连接的数量。只是好奇:你为什么需要知道这个数字?


谢谢,那个方法有效!(只需要用我正在使用的驱动程序替换“SQL Server”)连接数仅作为信息目的,以确保不会变得太多,但并不是非常重要。 - Laurent

0

要确定每个数据库上的打开连接数,请尝试使用此SQL语句 - 我从互联网上的一个文档中得到了它。

select  db_name(dbid) , count(*) 'connections count'
  from master..sysprocesses
 where spid > 50 and spid  @@spid
 group by  db_name(dbid)
 order by count(*) desc

SQL Server使用Spids <=50。因此,上述SQL将告诉您程序使用的连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接