广告连接未关闭
本文关键字:连接 | 更新日期: 2023-09-27 18:34:31
请考虑以下代码:
private static void GetData<TConnection, TCommand>( string connectionString, DataTable dataFromDbf, string commandText )
where TConnection : IDbConnection
where TCommand : IDbCommand {
using( IDbConnection oConn = GetConnection<TConnection>( connectionString ) ) {
oConn.Open( );
IDbCommand oCmd = oConn.CreateCommand( );
oCmd.CommandText = commandText;
dataFromDbf.Load( oCmd.ExecuteReader( ) );
oConn.Close( );
}
}
该方法是通用的,因为并非所有客户都有Adavatage DB服务器,我们需要回退到OleDbConnection。但是,在大多数情况下,我们使用AdsConnection对象(来自Advantage.Data.Provider.dll(。
上面的代码关闭连接,对象在退出 using 语句时被释放。
当我们使用优势管理实用程序查看 Ads 服务器上的所有连接时,我们注意到连接保持打开状态。但不是全部!我们调用该方法可能 200 次,只有少数保持打开状态,有时超过客户端MAX_CONNECTIONS。我们可以解决这个问题,感谢Jens Mühlenhoff。
问题是:
为什么调用 oConn.Close(( 时连接没有关闭?有人有什么想法吗?
是否使用连接池?
根据 ADS 在线帮助,Close()
可能并没有真正关闭连接,而是将其返回到连接池。
在这种情况下,您可以禁用池化或调用FlushConnectionPool()
。请注意,这会刷新整个应用程序的连接池。
http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/dotnet_adsconnection_close.htm
http://devzone.advantagedatabase.com/dz/webhelp/Advantage10.1/dotnet_adsconnection_flushconnectionpool_.htm