PowerBuilder与SQL Server的连接

2020-09-24 08:04发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在将PowerBuilder...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在将PowerBuilder经典应用程序(PB ver,12.6)从Sybase ASE数据库转换为SQL Server数据库。 我的问题是有关PowerBuilder经典应用中SQL Server连接中的多个活动结果集(MARS)的问题。 SQLCA.DBMS =" ADO"

我是PowerBuilder的新手。

我对 ADO.NET

很有经验

我遇到的第一个例外是"在MARS批处理中启动的事务在批处理结束时仍处于活动状态。该事务被回滚。"。 这是使用SqlCa执行立即"开始事务"的结果。 这使我在SqlCa.DBParm中明确指定" MultipleActiveResultSets = false"

因此,在禁用MARS的情况下,我重新运行了该应用程序。 begin事务处理语句成功,但是另一个错误从某个地方出现(我认为是DataWindow Framework)。 错误是"已经有与此命令关联的打开的DataReader,必须先关闭它"。

在我的 ADO.NET 经验中,我之前曾看到过这种打开的DataReader错误。

这两个错误,一个错误启用了MARS,另一个错误禁用了MARS,使我认为PowerBuilder经典框架期望启用SQL Server连接的MARS功能。

我对吗,必须从PB经典应用程序的SQL Server连接上启用MARS?

4条回答
SAP浪
2020-09-24 08:34

Hello David,< br>
让我们关注您的第一个异常:-)

如果您发出EXECUTE IMMEDIATE来使用Begin Transaction来控制自己的事务,则必须显式地提交或回滚该事务,因为SQLCA AutoCommit是 默认情况下设置为True。

查看AutoCommit文档,该文档对此进行了解释:

使用EXECUTE IMMEDIATE当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语句的信息,请参阅《 PowerScript参考》

希望这会有所帮助,

亲切的问候,
Jacob

一周热门 更多>