alf*_*fah 0 c# sqlite windows-phone-8 win-universal-app
在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)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
而且(在某些其他文件中)我需要访问此连接,更新表或插入.我通过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{}
Run Code Online (Sandbox Code Playgroud)
一般规则是始终Dispose()在IDisposalbe对象上调用方法.是的,你应该关闭它.接下来的问题是在哪里.有两种方法可以做到这一点.首先 - 使用using指令进行临时本地连接,例如:
using(SqlConnection connection = new SqlConnection("ConnectionString"))
{
// some code here
}
Run Code Online (Sandbox Code Playgroud)
但似乎您在字段中存储对连接的引用.在这种情况下,具有此字段的类应该在其自己的方法中实现IDisposable和调用:connection.Dispose()Dispose
class Repository : IDisposable
{
SqlConnection connection = new SqlConnection("ConnectionString");
void Dispose()
{
connection.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
但无论如何你需要using在这里,唯一的区别 - using你将创造Repository而不是SqlConnection