首页 > 解决方案 > 来自 dispose 或析构函数的 Stacktrace 不完整

问题描述

我有一个抽象类,其中构造函数打开一个 sql 连接,该连接在处置实现中被关闭。(处置可能在超类的析构函数中的某处被调用)

我的堆栈跟踪就是这样的:

internal error .net framework data provider 1 (translated)
   at System.Data.ProviderBase.DbConnectionInternal.PrePush(Object expectedOwner)
   at System.Data.ProviderBase.DbConnectionPool.PutObject(DbConnectionInternal obj, Object owningObject)
   at System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Close()
   at Framework.Data.DataAccessBase.CloseConnection() in C:\Development\Source\Libraries\Framework.Data\DataAccessBase.cs:Line 304.

这个类的第 304 行是:

private void CloseConnection()
{
    try
    {
        if (_sqlConn.State == ConnectionState.Open)
            _sqlConn.Close();
    }
    catch (Exception e)
    {

    }
}

(我只是添加了catch (Exception e)获取堆栈跟踪,我想稍后在修复错误时将其删除)

private 的唯一用法CloseConnection是在- 方法中Dispose(bool disposing)。但是我在哪里可以获得更多的堆栈跟踪?调用 Disposed 的超类(或析构函数)?

或者也许你有一个提示,堆栈跟踪有什么问题?我阅读了一些关于此错误消息的 stackoverflow 文章,但我需要找到源 - 但堆栈跟踪不是很有帮助..

编辑:这是我对 DataAccessBase 的处理:

protected virtual void Dispose(bool disposing)
{
    if (!_disposed)
    {
        if (disposing)
        {
            if (_sqlConn != null)
            {
                CloseConnection();
                _sqlConn.Dispose();
            }
        }

        _disposed = true;
    }
}

标签: c#destructoridisposable

解决方案


推荐阅读