1

我正在编写一些控制台应用程序来在 SQLite 数据库之间移动一些数据。连接的类和各种准备好的语句实现了 IDisposable,所以我使用using块来实例化这些对象,如下所示:

using (SQLiteConnection sqlite_conn = new SQLiteConnection(connectionString))
{
    sqlite_conn.Open();
    using (SQLiteCommand sqlite_cmd = new SQLiteCommand())
    {
        sqlite_cmd.Connection = sqlite_conn;
        sqlite_cmd.CommandText = "INSERT INTO SOMETHING SOMETHING;";
        sqlite_cmd.ExecuteNonQuery();
    }
    sqlite_conn.Close();
}     

但是,我需要能够在一种方法中创建这些连接,然后在其他方法中调用它们。对我来说,将这些连接存储为实例变量的最简洁、最容易混淆的方式是什么?我想确保.Dispose()以一种智能的方式调用他们的方法,但看不到确保所有操作都发生在单个using块的上下文中的好方法。

我意识到这是一个 C# 新手问题,所以请调整你的答案。如果您有建议的解决方案,如果您包含一个代码示例来说明,我会很高兴。

编辑:我的用例是一个控制台应用程序。有人传入源连接字符串和目标连接字符串,控制台应用程序执行操作。我真的会让我的控制台类程序本身像这样实现 IDisposable 吗?:

class Program : IDisposable
{
    private SQLiteConnection sourceConnection;
    private SQLiteConnection destinationConnection;

    public void Dispose()
    {
        sourceConnection.Dispose();
        destinationConnection.Dispose();
    }  
}
4

3 回答 3

2

我需要能够在一种方法中创建这些连接,然后在其他方法中调用它们。对我来说,将这些连接存储为实例变量的最简洁、最容易混淆的方式是什么?

在这种情况下,保存这些实例变量的类本身应实现 IDisposable,并且在处置时应确保连接也已处置。

此外,当您同时拥有多个 IDisposables 时,您可以通过这种方式重新编写它,对它们进行分组并减少代码中的嵌套:

using (SQLiteConnection sqlite_conn = new SQLiteConnection(connectionString))
using (SQLiteCommand sqlite_cmd = new SQLiteCommand())
{
    sqlite_conn.Open();

    sqlite_cmd.Connection = sqlite_conn;
    sqlite_cmd.CommandText = "INSERT INTO SOMETHING SOMETHING;";
    sqlite_cmd.ExecuteNonQuery();
} // no need to call .Close(): IDisposable normally handles it for you
于 2009-05-06T01:28:47.843 回答
1

您可以让您的类实现 IDisposable 并确保在 Dispose 方法中清理连接等。然后调用你的类的方法可以使用(MyClass c ...)。

于 2009-05-06T01:29:55.783 回答
1

一种方法是让您的类实现 IDisposable。在您的类的 Dispose 方法中,调用连接和命令等的 Dispose 方法。然后您可以在 using 块中使用您的类的实例。

于 2009-05-06T01:33:18.363 回答