此 npgsqltransaction 已完成,不再可用

问题描述 投票:0回答:2

最近我们从 MSSQL 数据库迁移到 PostgreSQL 数据库。为了通过 .NET 访问 PostgreSQL,我们使用 PostgreSQL 的 NpgSql ADO.NET 提供程序。有时我们的应用程序会收到错误“此 npgsqltransaction 已完成,不再可用”。这是一种罕见的情况,因此我们无法找到问题的确切原因。

有人可以告诉我这个错误的情况和原因吗?

--卡迈勒

npgsql
2个回答
0
投票

这是 Npgsql 早期版本的问题。发生这种情况是因为当在已完成的事务上访问 NpgsqlTransaction.Connection 时它们会抛出异常。

5.0.1 版本已修复。如果您将 Npgsql 软件包升级到最新版本,这将解决。

此处报告了问题


0
投票

我注意到抛出此异常的另一种情况。如果您尝试在包含显式事务的 sql 命令的代码中提交事务,则会导致您所询问的异常。

代码示例:

using var connection = new NpgsqlConnection(connectionString)
await connection.OpenAsync();
var transaction = await connection.BeginTransactionAsync();
var command = connection.CreateCommand();
command.CommandText = sqlScript;
var result = await command.ExecuteNonQueryAsync();
await transaction.CommitAsync();

sqlScript 包含这样的内容:

START TRANSACTION;

-- your commands here

COMMIT;
© www.soinside.com 2019 - 2024. All rights reserved.