7

Sqliteデータベースを使用するwinformでデスクトップアプリケーションを作成しています。

そこで、を使用するSqlite Helperクラスを作成しSystem.Data.SQLite、そのHelperクラスの各メソッドが接続を開いたり閉じたりします。

しかし、今度は追加のデータベースを接続する機能も追加しましたが、接続が閉じられると、接続されているすべてのデータベースが失われます。

これを修正するために、接続がコンストラクターで開かれ、開いたままになるようにクラスを変更しました。

アプリケーションが終了したら、Closeメソッドを明示的に呼び出さずにその接続を閉じたいと思います。

それを行う方法の提案はありますか?

4

4 に答える 4

5

Closeデータベースを切断しないでください。ただし、これは.NET接続プールメカニズムがオンになっている場合にのみ機能します。接続文字列でこれが有効になっていることを確認してください。

Data Source=filename;Version=3;Pooling=True;Max Pool Size=100;
于 2012-05-05T09:35:46.597 に答える
5

アプリケーションの存続期間中、接続を開いたままにしておくことは、良い方法ではありません。
このルートをたどらないことをお勧めします。
それどころか、必要に応じて呼び出すことができるメソッド内にデータベースをアタッチする機能をカプセル化しようとします。

例えば:

private static void AttachDB(string fileDB, string aliasName, SQLiteConnection cn) 
{ 
    string sqlText = string.Format("ATTACH '{0}' AS {1}", fileDB, aliasName) 
    SQLiteCommand cmd = new SQLiteCommand(sqlText, cn) 
    cmd.ExecuteNonQuery(); 
} 

次に、コードで

using(SQLiteConnection cn = new SQLiteConnection(GetConnectionString()))
{
     AttachDB(@"C:\SQLite\UserData.sqlite3", "UserData", cn);
     // Do your code here
} 
于 2012-05-05T09:14:42.680 に答える
1

C# には、このような状況のための特別な構文があります。

using(var connection = new Connection())
{
   //work with connection
}

コンパイルすると次のようになります。

Connection connection = null;
try
{
   connection = new Connection();
   //your operations
}
finally
{
   connection.Dispose();
}

Dispose() を呼び出すと、接続が閉じます。

于 2012-05-05T09:13:48.483 に答える
1

クラスの定義方法に応じて、Dispose またはデストラクタを使用できます。または、プログラムの最後に明示的に Close() を呼び出します (Run の後、Main 内から)。

于 2012-05-05T08:51:34.353 に答える