如何在不使用.NET显式调用Close Method的情况下关闭Sqlite Connection

时间:2012-05-05 08:36:07

标签: c# .net sqlite database-connection system.data.sqlite

我正在winform中创建将使用Sqlite数据库的桌面应用程序。

所以我创建了使用System.Data.SQLite的Sqlite Helper类,并且该Helper类的每个方法都会打开和关闭连接。

但是现在我还添加了附加其他数据库的功能,但在Connection关闭后,所有附加的数据库都会丢失。

为了纠正这个问题,我修改了类,以便在构造函数中打开连接并保持打开状态。

应用程序结束后,我希望关闭该连接而不显式调用Close方法。

有任何建议怎么做?

4 个答案:

答案 0 :(得分: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
} 

答案 1 :(得分:5)

Close不应该断开您的数据库,但这仅在启用.NET连接池机制时才有效。确保在连接字符串中启用了该功能:

Data Source=filename;Version=3;Pooling=True;Max Pool Size=100;

答案 2 :(得分:1)

根据您的类的定义方式,您可以使用Dispose或析构函数。或者,在程序结束时显式调用Close()(在Main之后,在Run ...之后)。

答案 3 :(得分:1)

在C#中有这种情况的特殊语法:

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

它编译为:

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

在调用Dispose()时关闭连接。