我打开一个这样的连接:
Using conn as New OdbcConnection(connectionString)
conn.Open()
//do stuff
End Using
如果启用了连接池,则连接不会在物理上关闭,而是释放到池中并且将被重用。如果它被禁用,它将被物理关闭。
有没有办法以编程方式知道 是否启用了连接池?以及当前在池中打开的已使用和未使用的连接数?
编辑:我需要从程序中获取此信息,我无法在将部署该程序的每台 PC 上手动检查它。
我打开一个这样的连接:
Using conn as New OdbcConnection(connectionString)
conn.Open()
//do stuff
End Using
如果启用了连接池,则连接不会在物理上关闭,而是释放到池中并且将被重用。如果它被禁用,它将被物理关闭。
有没有办法以编程方式知道 是否启用了连接池?以及当前在池中打开的已使用和未使用的连接数?
编辑:我需要从程序中获取此信息,我无法在将部署该程序的每台 PC 上手动检查它。
MSDN 作为对此的深入指导
从数据源管理员配置连接池
[剪辑]
或者,您可以在运行提示符处启动 ODBC 数据源管理器。在任务栏上,单击开始,单击运行,然后键入 Odbcad32。
用于管理连接池的选项卡位于 ODBC 3.5 及更高版本的 ODBC 数据源管理器对话框中。从注册表配置连接池
对于 ODBC 核心组件 3.5 版本之前的版本,您需要直接修改注册表来控制连接池的 CPTimeout 值。
池始终由数据服务器软件处理。重点在于,在 .NET 中您不必担心它(例如,这就是为什么在使用 SQL Server 时应该始终使用 SqlConnection 的原因——部分原因是它启用了连接池)。
在 Vista 上,只需在开始菜单中键入“ODBC”,它就会为您找到该应用程序。
关于确定是否在每台机器上启用了连接池,请查看MSDN 指南,我会说最好检查注册表值(有关注册表访问的指针,请参阅本文)。
TBH 不过,除非客户端机器真的很糟糕,否则我什至可能不会打扰.. AFAIK 默认情况下启用它,并且在客户端机器上打开连接(根据我的经验)从来都不是什么大问题。只有在开仓时,它才会真正成为一件大事。
看起来您可以只读取此注册表项:
[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
Spids <=50 由 sqlserver 使用。所以上面的 sql 会告诉你程序使用的连接。