我这样打开一个连接:
Using conn as New OdbcConnection(connectionString)
conn.Open()
//do stuff
End Using
如果启用了连接池,连接不会被物理关闭,而是释放到池中并将被重复使用。如果禁用连接池,则连接将被物理关闭。
有没有办法以编程方式知道连接池是否启用?以及当前在池中打开的已使用和未使用的连接数量?
编辑:我需要从程序内获取此信息,我不能在部署程序的每台计算机上手动检查它。
我这样打开一个连接:
Using conn as New OdbcConnection(connectionString)
conn.Open()
//do stuff
End Using
MSDN提供了关于此问题的详细指南,点击此处查看。
从数据源管理员配置连接池
[省略]
或者,您可以在运行提示符中启动ODBC数据源管理员。在任务栏上,单击开始,单击运行,然后键入Odbcad32。
在ODBC 3.5及更高版本中,管理连接池的选项卡在ODBC数据源管理员对话框中找到。
从注册表配置连接池
对于ODBC核心组件版本3.5之前的版本,您需要直接修改注册表以控制连接池CPTimeout值。
连接池始终由数据服务器软件处理,这也是.NET中不必担心它的原因(例如,这就是为什么在使用SQL Server时应始终使用SqlConnection的一部分-因为它启用了连接池)。
在Vista上,只需在开始菜单中键入“ODBC”,即可找到该应用程序。
要确定每台计算机是否启用了连接池,请查看MSDN指南,我认为您最好检查注册表值(有关注册表访问指针,请参见此文章)。
但是,除非客户机真的很差,否则我可能甚至不会费心。据我所知,默认情况下启用它,并且在客户机上打开连接(根据我的经验)从来没有成为大问题。只有在打开了大量连接时才会变得重要。
看起来你可以直接读取这个注册表键:
[HKEYLOCALMACHINE]\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout
(或者类似的变体,取决于你的操作系统和用户账户)。如果值为0,则连接池被禁用。如果它的值大于0,则启用了连接池。
参见:
http://msdn.microsoft.com/en-us/library/ms810829.aspx
我不确定如何获取打开连接的数量。只是好奇:你为什么需要知道这个数字?
要确定每个数据库上的打开连接数,请尝试使用此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将告诉您程序使用的连接。