2012-03-21 291 views
1

这是我一直想知道的事情....会吗?当应用程序关闭时,数据库连接会立即关闭吗?

因为每当我编写代码使用DB连接时,我总是不得不保证在处理之前关闭下一个块。

但是当,如果我有一个开在其构造连接,直到它击中保存按钮不会关闭或取消按钮ChildWindow。那么如果整个应用程序关闭了,数据库连接会立即关闭吗?或者它必须等待超时并自动关闭?

编辑:

所以我想保持实时连接打开登录我的应用程序的所有错误:

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相似。在这种情况下,它始终保持连接。但数据库连接在退出后会立即关闭吗?

+1

@Oded,我没有看到关于现有应用程序的行为的任何假设。 – mikerobi 2012-03-21 19:56:11

+0

@按要求提供,我推出了一些我正在研究的内容。但正如mikerobi所说,我想知道退出应用程序的行为。没有解决方法来确保连接关闭。 – 2012-03-21 20:05:42

回答

2

短期和简单的答案:总是用在using语句间的连接:

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

,然后你将不必担心 - 它只是接近时,它超出范围,是它的结束方法,例外或应用程序关闭。

+2

是的,但没有回答这个问题。 – 2012-03-21 20:03:03

+0

但是你的问题并不清楚 - 你想完成什么?知道如果连接将关闭?知道连接何时关闭?你告诉@Oded你的问题不是假设。请明确点。 – 2012-03-21 20:08:19

+0

@OferZelig我只想知道应用程序是否关闭,所有打开的数据库连接会立即关闭?所以我不必担心数据库连接是否有机会长时间存在。 (假设应用程序由1000个用户运行,如果连接在应用程序退出后不会立即关闭,而是等待一段时间超时并关闭,则有可能会保留许多未使用的连接。)对不起,也许有人会认为我使问题复杂化了。但我只想清楚知道会发生什么。 – 2012-03-21 20:23:58

2

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

这就是连接池是。你是否衡量了你的表现或者你是否确定了有力的证据表明这是一个问题?

打开和关闭与using块的连接,让连接池做的工作。

如果您的进程退出,您的连接将被关闭。

+0

'使用'块基本上就是'try {...} finally {obj.Dispose()}'。我记得当我使用NexusDB的时候(是的,并不是着名的),每次写入时与ADO的开放连接比开放连接慢一次并写下所有内容。 – 2012-03-21 20:15:03

+1

@陈陈ADO.NET有连接池。 http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx – dotjoe 2012-03-21 20:30:02

+0

@dotjoe Ooooh,我明白了。读完之后。我只写了一个小程序,用ADO打开连接(使用MsSQL)来测试性能,并在需要时打开。它大约相同。奇怪......那么当我使用NexusDB进行测试时,怎么会慢得多...... +1 – 2012-03-21 20:55:30

相关问题