退出WP应用程序时是否需要关闭SQLite连接?

时间:2015-05-26 12:27:13

标签: 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)
            {

            }
        }
    }

在哪里(在其他文件中)我需要访问此连接,更新表或插入。我通过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{}

2 个答案:

答案 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中打开连接的方式

  1. 您不希望在视图中包含与数据库连接相关的任何内容。
  2. 根据您提供的样本,我认为没有任何优势。您可以每次只打开连接。
  3. 如果您担心打开X连接,请查看following MSDN article。它与SqlConnections有关,但SQLiteConnections的概念是相同的。