powerbuilder11.5 autocommit=true 不起作用,事务回滚



我正在将PowerBuilder 9.0升级到11.5版

用于使用 autocommit=true,但在 PowerBuilder11.5 中:

使用 autocommit=true 时,我在连接时出错,sqlstate 42000,dbcode 3997(火星问题(。已经做了一些阅读,因此将其添加到DBPARM中:ProviderString='MARS Connection=FALSE;'

现在连接可以正常工作,但是:事务没有提交,退出程序时,它全部回滚...

这是代码:(出于安全原因,我用###的屏蔽了用户ID等。

    SQLCA.DBMS = "SNC SQL Native Client(OLE DB)"
    SQLCA.LogPass = "######"
    SQLCA.ServerName = "#######"
    SQLCA.LogId = "######"
    SQLCA.AutoCommit = True

SQLCA.DBParm= "Database='yedidtst',Provider='SQLNCLI10',ProviderString='MARS Connection=FALSE;"

    Connect;
    string  scommand="begin transaction"

execute immediate :scommand;
execute immediate "INSERT INTO [######].[dbo].[app_application]      ([application])  VALUES  ('stam2')";

commit;

立即执行"结束交易";

事务不执行,它被回滚并且什么也没做,即使我添加了带有"结束交易"的行.

这是怎么回事?

谢谢罗尼特。

来自 PowerBuilder 帮助中的自动提交:

当"自动提交"设置为 True 时,可以使用"立即执行"动态 SQL 语句发出"开始事务"、"提交事务"、"回滚事务"和其他 SQL 语句来控制自己的事务处理。如果使用 EXECUTE IMMEDIATE 动态 SQL 语句发出 BEGIN TRANSACTION,那么必须使用 EXECUTE IMMEDIATE 动态 SQL 语句来发出相应的 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION。

这似乎是相关的部分:您必须使用 EXECUTE IMMEDIATE 动态 SQL 语句来发出相应的 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION。

我们昨天用这个解决了这个问题:我们将此行添加到 DBParm 中: 提供程序字符串='MARS 连接=FALSE'并向 BEGIN 事务中添加了一个名称,如下所示: scommand="开始事务 tran1" 立即执行 :scommand 使用 object_tran

最新更新