PowerBuilder与SQL Server的连接

2020-09-24 08:04发布

         点击此处--->   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?

         点击此处--->   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条回答
compass1988
1楼-- · 2020-09-24 08:45

大卫,您好;

SQLServer Native Client 驱动程序仅支持MARS功能AFAIK。 对此方面的快速检查将是更改您的事务对象,如下所示:

  • 来自:SQLCA.DBMS =" ADO"
  • 收件人:SQLCA.DBMS =" SNC"

HTH

关于..克里斯

me_for_i
2楼-- · 2020-09-24 08:46

嗨克里斯,

您可能是对的,因为在PowerBuilder联机帮助中仅在SNC界面中提到了MARS。
实际上,通过阅读连接到数据库手册,您可以在" SQL Server 2005功能"部分:

多个活动结果集
SNC接口支持多个活动结果集(MARS),使应用程序可以打开多个默认结果集并交错读取它们。 应用程序还可以在打开默认结果集的同时执行诸如INSERT,UPDATE和DELETE之类的语句以及存储过程调用。

问候,
Jacob

SAP浪
3楼-- · 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

何必丶何苦呢
4楼-- · 2020-09-24 08:44

嗨,大卫,
我还没有听说过您必须使用PowerBuilder绝对打开MARS功能。
但是,当MARS 关闭后,从我的PB经验中我已经看到也必须禁用连接池:

SQLCA.DBMS =" TRACE SNC"//此处的TRACE关键字用于启用数据库跟踪
SQLCA.DBParm =" ProviderString ='MultipleActiveResultSets = false; OLE DB Services = -4'"

致谢,
雅各布

一周热门 更多>