c# - 来自 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;
}
}
解决方案
推荐阅读
- django - 在 html 模板中渲染 Django @property 方法
- javascript - Visual Studio Code Intellisense 未检测到 ES6 符号属性
- html - 如何使两个跨度从 td 表中的同一行开始
- css - 如何更改 flexbox 中的填充?
- python - 为什么会出现错误信息 Exception: This file has been closed
- c# - 在数组中输入数字时使用循环进行验证
- probability - 解决三张牌谜题概率
- javascript - 在一个特定的入口点中包含所需的节点模块,并将它们从其余部分拆分为供应商块
- html - 如何在 HTML 中的 2 行表格的左侧添加图像
- jquery - 如何使用元素查找特定ID