我有一个SqlTransaction,它执行一些操作,首先删除数据,然后用SqlBulkCopy插入。有时,在处理过程中经过一段时间后,SqlTransaction将Connection设置为null,并且尝试插入更多带有SqlBulkCopy的行会导致错误:
事务不是与当前连接关联,就是已完成。
当我查看源代码时,当事务被僵尸化时,就会有一个内部状态,而我的事务可能已经进入了这种状态。
有什么方法可以找出交易为什么会进入这种状态吗?
例外情况:
事务不是与当前连接关联,就是已完成. System.Data.SqlClient.SqlBulkCopy.CreateOrValidateConnection(String方法的.)在System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32 columnCount ),CancellationToken (令牌)在System.Data.SqlClient.SqlBulkCopy.WriteToServerAsync(DataRow[]行( CancellationToken cancellationToken)
发布于 2021-06-08 07:37:26
我试图在上打开在SqlConnection上记录信息消息:
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)在锁定与另一个进程的通信缓冲区资源时陷入僵局,并被选择为死锁受害者。重新运行事务.
https://stackoverflow.com/questions/67876882
复制相似问题