当应用程序关闭时,DB连接会立即关闭吗?

时间:2012-03-21 19:45:54

标签: c# entity-framework ado.net database-connection

这是我一直想知道的......它会吗?

因为无论何时我编写代码来使用数据库连接,我总是必须确保在进入下一部分之前关闭。

但是如果我有一个ChildWindow在它的构造函数中打开一个连接而没有关闭它,直到它点击Save按钮或Cancel Button。然后,如果整个应用程序关闭,数据库连接会立即关闭吗?或者它必须等待超时并自动关闭?

编辑:

所以我试图保持一个实时连接打开以记录我的应用程序上的所有错误:

public App()
{

   ErrorHelper errorHelper = new ErrorHelper(); // Will open DB connection
   AppDomain currentDomain = AppDomain.CurrentDomain;
   currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);

}

/// <summary>
/// For catch all exception and put them into log
/// </summary>
void currentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{

    errorHelper.WriteError(e.ExceptionObject as Exception);            

}

因为我不喜欢每次打开连接时都记录一个错误,所以我想一直保持连接打开。这与我描述的OP类似。在这种情况下,它始终保持连接打开。但是数据库连接退出后会立即关闭吗?

2 个答案:

答案 0 :(得分:2)

简短回答:始终在using声明中使用您的连接:

using (var db = new Connection())
{
    ...
}

然后你就不用担心了 - 它会在超出范围时关闭,无论是方法结束,异常还是应用程序关闭。

答案 1 :(得分:2)

  

因为我不喜欢每次打开连接时都记录一个错误,所以我想一直保持连接打开。

这就是连接池的用途。您是否已经衡量了自己的表现,或者您是否确认了这是一个问题的有力证据?

打开并关闭与using块的连接,让连接池完成它的工作。

如果您的流程退出,您的连接将会关闭。