在我的通用应用程序的App.xaml.cs
中,我打开了一个SQLConnection。我没有关闭连接。到目前为止它并没有给我带来麻烦。但这是正确的方式,我们可以这样离开吗?
如果我们要关闭连接(Dispose()
,因为我没有看到关闭功能)我们在哪里关闭?在App_Closing
?
修改
这就是我在App.xaml.cs中打开连接的方式
public static SQLiteConnection conn;
public void LoadDatabase()
{
conn = new SQLiteConnection( "JusWriteDB.db");
string sql = @"CREATE TABLE IF NOT EXISTS Folder (FolderCompletedStatus INTEGER, FolderPriority INTEGER, PenColor INTEGER, FolderText TEXT, FolderUUID TEXT PRIMARY KEY NOT NULL );";
using (var statement = conn.Prepare(sql))
{
try
{
statement.Step();
}
catch(Exception)
{
}
}
}
在哪里(在其他文件中)我需要访问此连接,更新表或插入。我通过App.xaml.cs中定义的公共变量访问它。
var db = App.conn;
string sql = "SELECT * from Folder Where FolderSyncStatus = 'Del'; ";
try
{
using (var statement = db.Prepare(sql))
{
while (statement.Step() == SQLiteResult.ROW)
{ // code
}
}
}
catch{}
答案 0 :(得分:5)
一般规则是始终在Dispose()
个对象上调用IDisposalbe
方法。是的,你应该关闭它。
接下来的问题是在哪里。
有两种方法可以做到这一点。
首先 - 使用using
指令进行临时本地连接,例如:
using(SqlConnection connection = new SqlConnection("ConnectionString"))
{
// some code here
}
但似乎您在字段中存储对连接的引用。在这种情况下,具有此字段的类应实现IDisposable
并在其自己的connection.Dispose()
方法中调用Dispose
:
class Repository : IDisposable
{
SqlConnection connection = new SqlConnection("ConnectionString");
void Dispose()
{
connection.Dispose();
}
}
但无论如何,您需要using
这里唯一的区别 - 在using
您将创建Repository
而不是SqlConnection
答案 1 :(得分:2)
退出WP应用程序时是否需要关闭SQLite连接?
一般规则是:如果对象实现IDisposable
,则应该处理它或使用using
。
using(SQLiteConnection conn = new SQLiteConnection("<ConnectionString>"))
{
...
}
只有少数例外情况(例如DataSets and DataTables)。
如果我们要关闭连接(Dispose()因为我没有看到关闭 功能)我们在哪里关闭?
如果您使用using
,则无需提出此问题,因为它会自动处理。
如果你不使用using
,那么在大多数情况下存储连接并重复使用它不是一个好主意(除非你喜欢错误),所以答案将是“尽快”。
编辑(关注OP)
这就是我在App.xaml.cs中打开连接的方式