是否有必要解构singleton sql连接?

时间:2015-09-18 06:27:00

标签: c# singleton database-connection

通常我正在使用这些陈述:

false

定义我使用sql命令的区域。现在对于特定的应用程序,我正在考虑将sql连接放入单例而不是上面的构造:

using (SqlConnection connection = new SqlConnection("Data ...")) 
{
  ....
}

现在我的问题是....通常当我使用“使用”时,连接被关闭,....但是当我使用单例时,它存在于程序本身的整个运行时。是否有必要在那里建立一个“解构器”,以便在程序结束时关闭连接?

2 个答案:

答案 0 :(得分:0)

当我们想要某个工具函数时,实现IDisposable我们正在使用这样的Action

public class SimpleClass
{
    public static void InvokeSql(Action<SqlConnection> func)
    {
        if (func == null)
        {
            throw new NullReferenceException("func");
        }

        using (SqlConnection connection = new SqlConnection("Data ..."))
        {
            connection.Open();
            func(connection);
        }
    }
}

您可以像现在这样使用SqlConnection

public class Foo
    {
        public void Bar()
        {
            SimpleClass.InvokeSql((connection) =>
                {
                    string sql = "DELETE [User]";
                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        command.ExecuteNonQuery();
                    }
                });
        }
    }

因此,连接已创建并处置以供使用。

答案 1 :(得分:-1)

考虑一下:如果您使用单例进行连接并且出现连接错误(例如:连接丢失...),谁处理(=关闭)brocken连接? 因此,如果你想坚持你的单身机制,我会建议使用一个关闭的“try-catch”块;最后一块中的陈述:

  try
  {
    singletonConnection = new SqlConnection("Data Source.....");
  }
  catch (SqlException)
  {
    throw;
  }
  finally 
  {
    singletonConnection.Close();
  }

但是像macr_S所说:使用using构造将是最简单的方法。