我正在将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