通常我正在使用这些陈述:
false
定义我使用sql命令的区域。现在对于特定的应用程序,我正在考虑将sql连接放入单例而不是上面的构造:
using (SqlConnection connection = new SqlConnection("Data ..."))
{
....
}
现在我的问题是....通常当我使用“使用”时,连接被关闭,....但是当我使用单例时,它存在于程序本身的整个运行时。是否有必要在那里建立一个“解构器”,以便在程序结束时关闭连接?
答案 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构造将是最简单的方法。