为什么在.NET中尝试关闭SqlConnection时会出现ThreadAbortException异常?

8
我每次执行以下操作都会出现以下异常:
Using cnn As SqlConnection = New SqlConnection(ConnectionStr)
    cnn.Open()  'I am fine up to here'
End Using       'Here I am getting the following exception'

手动调用cnn.Dispose()会导致相同的异常。在我的代码大部分地方似乎都没有问题,但就是在这个函数中,我无法关闭我打开的连接,因为我不断收到ThreadAbortException异常。我很困惑,有什么建议吗?有什么提示吗?下面是我得到的异常信息:

System.TypeInitializationException: The type initializer for 'System.Data.ProviderBase.DbConnectionClosedPreviouslyOpened' threw an exception. ---> System.Threading.ThreadAbortException: Exception of type 'System.Threading.ThreadAbortException' was thrown.
   --- End of inner exception stack trace ---
   at System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlInternalConnection.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Close()
   at System.Data.SqlClient.SqlConnection.Dispose(Boolean disposing)

ThreadAbortException 是一种异步异常。找出引发它的原因应该是一个有趣的挑战。 - vcsjones
这段代码在哪里运行?ASP.NET,SQL Server? - Brian Gideon
这是一个WinForms应用程序,连接到SQL Server。 - Denis
如果您在cnn.Open之后立即调用cnn.Dispose,是否会出现错误? 如果没有,则可能指向cnn.OpenEnd Using行之间的某些内容导致问题。 - Matt
1个回答

1

有人写了一个可怕的“Finalize”方法。它一直触发并试图关闭连接。这浪费了几个小时的时间!总有一天我会清除代码中所有的Finalize方法 - 在那之前,只能忍受它!


我一直认为Finalize是一件好事?- try,catch,finally - 即使抛出异常,当完成所有操作时,关闭数据库。虽然,在使用using语句时可能不太好。 - Mark
不对,那不是它的问题 - 它又回来了...一整天都正常运行,然后突然出现问题,而且停不下来! - Denis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接