如何在不使用 .NET 显式调用关闭方法的情况下关闭 Sqlite 连接

本文关键字:方法 情况下 连接 Sqlite 调用 NET | 更新日期: 2023-09-27 18:33:11

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

因此,我创建了使用 System.Data.SQLite 的 Sqlite 帮助程序类,并且该帮助程序类的每个方法都会打开和关闭连接。

但是

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

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

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

有什么建议吗?

如何在不使用 .NET 显式调用关闭方法的情况下关闭 Sqlite 连接

应用程序的生存期内保持连接打开状态不是一个好方法。
我建议不要走这条路。
相反,我将尝试将附加数据库的功能封装在可以使用的基础上调用的方法中。

例如:

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
} 

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

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

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

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

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

它编译为如下内容:

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

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