如果控制台程序终止,程序中使用的数据库连接是否仍然保持打开状态?

Sao*_*obi 6 database language-agnostic database-connection

在Java和C#中,它们都有类似System.terminate()的东西.如果我的程序有开放的数据库连接,数据库读取器和数据库命令变量,并且我在catch子句中终止我的程序,数据库资源是否仍然在使用?或者自从我的整个程序刚刚退出以来它们会被自动释放吗?

通常情况下,我应该如何处理这种情况,以确保我总是释放数据库连接,无论是通过正常的程序终止还是意外的程序终止?有什么好的做法?

Meh*_*ari 6

一旦进程终止,所有相关资源(包括内存,句柄,连接......)将被释放.

通常,在C#中,您将使用Dispose模式/ using语句来控制稀缺资源.


PSU*_*rdi 5

除非您特别关闭连接,否则它们将保持打开状态,直到超时结束.

我已经在C#中发现了很多次.最佳实践要求关闭/关闭您不再需要的资源.文件I/O流,数据库连接等


Joe*_*Joe 1

在 C# 中,您通常会在使用连接后立即关闭连接,例如:

using(SqlConnection connection = ...)
{
   ... do something ...
} // connection disposed / closed here
Run Code Online (Sandbox Code Playgroud)

然而,通常您将使用连接池,而这一切所做的只是将连接返回到池中。因此您的进程仍将与数据库服务器保持活动连接。

如果你干净地关闭,连接池无疑会被清理,并且与数据库的实际连接将被关闭(你可以通过查看数据库服务器上打开的连接来验证这一点)。

但在某些情况下(例如调用Environment.FailFast),应用程序可能会在不关闭连接的情况下崩溃——在这种情况下,它们最终会超时并被数据库服务器关闭。