我正在尝试将数据从Progress 4GL数据库中提取到SQL Server中。
理想情况下,我希望直接在.NET中完成这项工作,而不是通过ODBC驱动程序,因为Progress中的ODBC驱动程序网关不支持多核(至少在我们现有的版本上是这样)。
您知道如何从.NET连接到Progress 4GL数据库吗(理想情况下使用C#,但我在这里很灵活……;) )?
干杯
尼克
发布于 2010-01-18 23:42:50
如果您使用的是Progress OpenEdge版本10.2或更高版本,则可以将.NET控件直接嵌入到4GL程序中。但那就像用大锤子拍打苍蝇一样。即使不是,Progress4GL(编程语言)也是积极的单线程,不支持多线程.NET控件。
4GL和SQL-92db引擎(Progress支持两种不同的存储引擎接口)都是多线程的,并且完全可以利用您拥有的任意多个内核。
但是,您可能有一个许可限制--“工作组”许可在v9和早期的v10中使用基于信号量的并发算法。(以后的版本使用非常有限的互斥锁(自旋锁)。)“企业”数据库没有这样的限制。
或者可能是目标系统没有被设置为支持多个ODBC连接(数据库管理员应该知道,关键参数是-Mn、-Ma和可能的-Mpb)。
如果我这样做,我想我只是通过对不同的数据段启动多个会话来假装多线程访问。
发布于 2010-02-05 14:07:58
如果使用Java+JDBC驱动程序会更容易,因为使用OpenEdge DB相当简单。
不确定MS-SQL Server,但是MySQL有一个数据库迁移,它可以通过JDBC愉快地连接到OpenEdge,并为您导入选择或所有表。
我总是发现Progress ODBC驱动程序在.NET中存在缺陷和麻烦,我尽可能地避免使用它们。
您还可以使用app-server,尽管这很糟糕,但它是单线程的,并且对多线程访问有一个有限的连接限制。如果您选择此选项,请设置无状态服务。
发布于 2011-02-22 21:34:53
我来晚了,但我想提点建议可能会有用...
您可以使用.NET编写业务逻辑,并使用OpenEdge Open Client代理插入数据。如果您在代理周围构建了一个很好的边界(数据访问)层,并且代理只提取.NET中的BL将使用的数据,那么在某个时刻,您应该能够将其交换出去。如果你现有的应用程序庞大而笨重,这将很难对其进行分层。这还假设您正在使用Progress Appservers。
如果你没有使用应用程序服务器,那么你仍然可以用.NET编写你的数据访问,并将它包装在一组可直接从4GL“客户端代码”调用的com-callable wrappers...these中。在这种方法中,迁移到SQL Server会有点困难,但它可能会让您朝着您想要的方向发展。
祝好运!
https://stackoverflow.com/questions/2086638
复制相似问题