广告连接未关闭

本文关键字:连接 | 更新日期: 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