IBM Informix数据库错误'不在事务中'

时间:2018-03-26 21:51:26

标签: informix

Informix Version 11.7。

当我们尝试执行查询时获得以下异常:

错误[HY000] [Informix .NET提供程序] [Informix]不在事务中..

在执行之前,我们检查连接状态显示为“OPEN”,但我们仍然收到此错误。

如果有人遇到类似的例外,请分享一下吗?

1 个答案:

答案 0 :(得分:2)

Informix可以支持具有不同':

的数据库
  • 未记录 - 没有可用的交易。
  • 记录(缓冲) - 可用的事务,但需要显式的BEGIN WORK语句来启动事务,并且一旦事务启动,需要COMMIT使更改成为永久性(或ROLLBACK以取消更改)。 / LI>
  • 已记录(无缓冲) - 与具有缓冲日志记录的数据库非常相似。
  • MODE ANSI - 大多数SQL语句启动事务;需要COMMIT才能永久更改(或ROLLBACK取消更改)。

从你得到的错误(" -255:不在事务")中,你似乎正在使用一个已记录的数据库,而你正在执行的语句需要一个事务,但你不是& #39;在交易中。获得此主题的主要上下文是在执行BEGIN WORK语句之前执行COMMIT或ROLLBACK。如果您使用的是未记录的数据库,那么您将获得" -256:交易不可用"作为信息;如果您使用的是MODE ANSI数据库,则可以进行COMMIT或ROLLBACK,但是一旦您执行了除此之外的语句(例如,SELECT),您就无法进行明确地开始工作 - 你得到错误" -535:已经在交易"。

因此,似乎yu有一个已记录的数据库,您的代码在执行BEGIN WORK之前执行了COMMIT或ROLLBACK(可能在幕后)。

要解决此问题,您可以考虑切换到MODE ANSI数据库(不要轻易做出改变 - 对更改有其他影响,通常会对应用程序产生重大影响,这意味着它可能不会对应用程序造成影响。 (正确答案),但您可能需要确保您的软件包知道您所连接的Informix数据库的规则,并明确启动与BEGIN WORK的交易或不发送执行BEGIN WORK之前的COMMIT或ROLLBACK操作。

(在数据库中,当没有正在进行的事务时,每个单独的SQL语句形成自己的事务。如果会话以正在进行的未提交事务终止,则该事务将被回滚。更改仅提交 < / em>如果给出了显式COMMIT。)