首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么SqlTransaction僵尸

为什么SqlTransaction僵尸
EN

Stack Overflow用户
提问于 2021-06-07 18:22:59
回答 1查看 94关注 0票数 0

我有一个SqlTransaction,它执行一些操作,首先删除数据,然后用SqlBulkCopy插入。有时,在处理过程中经过一段时间后,SqlTransactionConnection设置为null,并且尝试插入更多带有SqlBulkCopy的行会导致错误:

事务不是与当前连接关联,就是已完成。

当我查看源代码时,当事务被僵尸化时,就会有一个内部状态,而我的事务可能已经进入了这种状态。

有什么方法可以找出交易为什么会进入这种状态吗?

例外情况:

事务不是与当前连接关联,就是已完成. System.Data.SqlClient.SqlBulkCopy.CreateOrValidateConnection(String方法的.)在System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32 columnCount ),CancellationToken (令牌)在System.Data.SqlClient.SqlBulkCopy.WriteToServerAsync(DataRow[]行( CancellationToken cancellationToken)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-08 07:37:26

我试图在上打开在SqlConnection上记录信息消息:

代码语言:javascript
复制
CurrentConnection = new SqlConnection(theConnectionString);
CurrentConnection.Open();
CurrentConnection.FireInfoMessageEventOnUserErrors = true;
CurrentConnection.InfoMessage += CurrentConnection_InfoMessage;


private void CurrentConnection_InfoMessage(object sender, SqlInfoMessageEventArgs e)
{
    var errors = new List<string>();
    if (e.Errors != null)
    {
        for (int i = 0; i < e.Errors.Count; i++)
        {
            errors.Add(e.Errors[i].ToString());
        }
    }

    _logger.LogEvent($"SQL connection info message: source={e.Source}, message={e.Message}, errors={string.Join(',', errors)}");
}

原来有一个死锁

SQL连接信息消息: source=Core .Net SqlClient数据提供程序message=Transaction (Process 134)在锁定与另一个进程的通信缓冲区资源时陷入僵局,并被选择为死锁受害者。重新运行事务.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67876882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档