没有找到这个确切的问题/答案。在VB.NET中,如果我在Try/Catch块中打开一个SqlConnection,并且抛出异常(正确捕获),连接是否会隐式关闭,还是我必须将其关闭?(如果Try失败,它是否会被打开?)
我想自己测试一下,但我不知道在抛出异常时如何确定连接是打开还是关闭。
谢谢!
没有找到这个确切的问题/答案。在VB.NET中,如果我在Try/Catch块中打开一个SqlConnection,并且抛出异常(正确捕获),连接是否会隐式关闭,还是我必须将其关闭?(如果Try失败,它是否会被打开?)
我想自己测试一下,但我不知道在抛出异常时如何确定连接是打开还是关闭。
谢谢!
不需要。 这就是为什么您希望在try/catch之前声明连接变量,并添加一个finally,以确保您有一个可以关闭和处理连接的地方:
Dim con As New SqlClientConnection( . . .)
Try
' DB Operations (create, read, update, delete) here
con.open()
Catch SqlClientException (ex)
' Deal with exception
Finally
' Code here will always run, whether or not the try code succeeded
' or if you wound up in a catch block. You can safely call .close()
' or (as shown below) .dispose() because if the connection is already
' closed/disposed, the call doesn't do anything.
' Dispose is what you want - it will not only close the
' connection, but it will release the .NET reference to
' the remote resource, freeing up that resource (the database
' in this case) to serve other clients.
con.Dispose()
End Try
VB.NET在Try/Catch中如果抛出异常,SqlConnection会自动关闭吗?
不会... - TrevorSqlConnection
不受GC的直接控制,它将使用服务器上的资源和可能的其他非网络资源。此外,如果建立太多连接并且没有正确关闭/处理它们,则GC在这一点上会被洗脑,不知道该怎么处理它们。SqlConnection
实现了IDisposable
,所以请处理它们 :) - Trevor