次のコードを検討してください。
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( );
}
}
すべての顧客がAdavatageDBサーバーを持っているわけではなく、OleDbConnectionにフォールバックする必要があるため、この方法は一般的です。ただし、ほとんどの場合、AdsConnectionオブジェクト(Advantage.Data.Provider.dllから)を使用します。
上記のコードは接続を閉じ、usingステートメントを終了するとオブジェクトが破棄されます。
Advantage Management Utilityを使用してAdsサーバー上のすべての接続を表示すると、接続が開いたままになっていることがわかります。すべてではありません!メソッドをおそらく200回呼び出しますが、開いたままになるのはごくわずかで、クライアントのMAX_CONNECTIONSを超えることもあります。JensMühlenhoffのおかげで、それを回避することができます。
質問は:
oConn.Close()を呼び出すときに接続が閉じないのはなぜですか?誰かアイデアはありますか?