3

我打开一个这样的连接:

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

如果启用了连接池,则连接不会在物理上关闭,而是释放到池中并且将被重用。如果它被禁用,它将被物理关闭。

有没有办法以编程方式知道 是否启用了连接池?以及当前在池中打开的已使用和未使用的连接数?

编辑:我需要从程序中获取此信息,我无法在将部署该程序的每台 PC 上手动检查它。

4

3 回答 3

3

MSDN 作为对此的深入指导

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

[剪辑]

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

用于管理连接池的选项卡位于 ODBC 3.5 及更高版本的 ODBC 数据源管理器对话框中。从注册表配置连接池

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

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

更新

在 Vista 上,只需在开始菜单中键入“ODBC”,它就会为您找到该应用程序。

OP澄清后更新

关于确定是否在每台机器上启用了连接池,请查看MSDN 指南,我会说最好检查注册表值(有关注册表访问的指针,请参阅本文)。

TBH 不过,除非客户端机器真的很糟糕,否则我什至可能不会打扰.. AFAIK 默认情况下启用它,并且在客户端机器上打开连接(根据我的经验)从来都不是什么大问题。只有在开仓时,它才会真正成为一件大事。

于 2008-09-24T05:36:14.193 回答
1

看起来您可以只读取此注册表项:

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

(或其中的一些变体,取决于您的操作系统和用户帐户)。如果值为 0,则禁用连接池。如果它是任何高于 0 的值,则启用它。

看:

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

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

于 2008-09-24T06:16:25.873 回答
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

Spids <=50 由 sqlserver 使用。所以上面的 sql 会告诉你程序使用的连接。

于 2009-05-08T07:07:56.093 回答