我正在使用 Sqlite 数据库的 winform 创建桌面应用程序。
所以我创建了 Sqlite Helper 类,该类使用System.Data.SQLite该 Helper 类的每个方法打开和关闭连接。
但是现在我还添加了附加数据库的功能,但是在连接关闭后,所有附加的数据库都会丢失。
为了纠正这个问题,我修改了类,以便在构造函数中打开连接并保持打开状态。
应用程序结束后,我希望在不显式调用 Close 方法的情况下关闭该连接。
任何建议如何做到这一点?
我正在使用 Sqlite 数据库的 winform 创建桌面应用程序。
所以我创建了 Sqlite Helper 类,该类使用System.Data.SQLite该 Helper 类的每个方法打开和关闭连接。
但是现在我还添加了附加数据库的功能,但是在连接关闭后,所有附加的数据库都会丢失。
为了纠正这个问题,我修改了类,以便在构造函数中打开连接并保持打开状态。
应用程序结束后,我希望在不显式调用 Close 方法的情况下关闭该连接。
任何建议如何做到这一点?
在应用程序的整个生命周期内保持连接打开并不是一个好方法。
我建议不要走这条路。
相反,我将尝试将附加数据库的功能封装在可以根据需要调用的方法中。
例如:
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() 时,您关闭连接。