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

时间:2016-02-15 11:04:32

标签: powerbuilder

我将PowerBuilder 9.0升级到版本11.5

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

当使用autocommit = true时,我得到错误连接,sqlstate 42000,dbcode 3997 (MARS问题)。 做了一些阅读,所以把它添加到DBPARM: ProviderString =' MARS Connection = FALSE;'

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

这是代码: (出于安全考虑,我用###' s掩盖了用户ID等等。)

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

SQLCA.DBParm ="数据库=' yedidtst',提供商=' SQLNCLI10',ProviderString =' MARS连接= FALSE;"

    Connect;

    string  scommand="begin transaction"


execute immediate :scommand;

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


commit;

//立即执行"结束交易";

交易没有执行,它的rollBack并没有完成任务, 即使我添加"结束交易"

这里有什么问题?

谢谢, Ronit。

2 个答案:

答案 0 :(得分:1)

来自PowerBuilder的Autocommit帮助:

当AutoCommit设置为True时,您可以使用EXECUTE IMMEDIATE动态SQL语句发出BEGIN TRANSACTION,COMMIT TRANSACTION,ROLLBACK TRANSACTION和其他SQL语句来控制您自己的事务处理。如果使用EXECUTE IMMEDIATE动态SQL语句来发出BEGIN TRANSACTION,则必须使用EXECUTE IMMEDIATE动态SQL语句来发出相应的COMMIT TRANSACTION或ROLLBACK TRANSACTION。

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

答案 1 :(得分:0)

我们昨天解决了这个问题: 我们将此行添加到DBParm:             ProviderString ='MARS Connection = FALSE' 并在BEGIN TRANSACTION中添加了一个名称,如下所示:             scommand =“begin transaction tran1”             执行立即:使用object_tran的scommand