我将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。
答案 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