我正在使用 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() 时,您关闭连接。