基本上我在应用程序启动时打开一个数据库连接,它应该保持打开状态直到应用程序的生命周期。
我正在使用控制台应用程序来完成这个后台工作:
class Program
{
#region '----- Method(s) -----'
static void Main(string[] args)
{
}
~Program()
{
}
#endregion
}
我应该在析构函数中关闭数据库连接还是应该实现IDisposable?
答案 0 :(得分:2)
使用IDisposable
。
这样做的最佳方法是在using
statement内实例化。
using (var conn = new SqlConnection(connectionString))
{
// your code here
}
答案 1 :(得分:2)
相信我,你不想这样做,最佳实践说只在需要时使用连接并尽快关闭它。如果您需要的是一个事务,那么您可以使用Sql事务并将方法放在使用sql Transaction
中using(SqlConnection sqlconn= new ())
using(SqlTransaction sqltrann = new ())
{
{
method1
method 2
}
}
答案 2 :(得分:1)
嗯..如果你没有创建程序类的实例,那么它不需要终结器,因为终结器仅被调用为对象的实例。你既不需要也不需要Finalizer,也不需要IDisposable。你必须这样做:
static void Main(string[] args)
{
db.Dispose();//In the end of console app executing code
}
答案 3 :(得分:1)
您可以在此处实施dispose模式,这是可取的。否则,请确保从CriticalFinalizerObject
继承实际类型,以便强制CLR将类型实例放置在最终化队列中,而不管运行时条件如何。
class Program:CriticalFinalizerObject
{
#region '----- Method(s) -----'
static void Main(string[] args)
{
}
~Program()
{
}
#endregion
}