考虑以下代码:
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 语句时对象被释放。
当我们使用 Advantage Management Utility 查看广告服务器上的所有连接时,我们注意到连接保持打开状态。但不是所有的!我们可能调用该方法 200 次,只有少数保持打开状态,有时超过客户端 MAX_CONNECTIONS。感谢Jens Mühlenhoff,我们可以解决这个问题。
问题是:
为什么调用 oConn.Close() 时连接没有关闭?有人有什么想法吗?