Sao*_*obi 6 database language-agnostic database-connection
在Java和C#中,它们都有类似System.terminate()的东西.如果我的程序有开放的数据库连接,数据库读取器和数据库命令变量,并且我在catch子句中终止我的程序,数据库资源是否仍然在使用?或者自从我的整个程序刚刚退出以来它们会被自动释放吗?
通常情况下,我应该如何处理这种情况,以确保我总是释放数据库连接,无论是通过正常的程序终止还是意外的程序终止?有什么好的做法?
在 C# 中,您通常会在使用连接后立即关闭连接,例如:
using(SqlConnection connection = ...)
{
... do something ...
} // connection disposed / closed here
Run Code Online (Sandbox Code Playgroud)
然而,通常您将使用连接池,而这一切所做的只是将连接返回到池中。因此您的进程仍将与数据库服务器保持活动连接。
如果你干净地关闭,连接池无疑会被清理,并且与数据库的实际连接将被关闭(你可以通过查看数据库服务器上打开的连接来验证这一点)。
但在某些情况下(例如调用Environment.FailFast),应用程序可能会在不关闭连接的情况下崩溃——在这种情况下,它们最终会超时并被数据库服务器关闭。