我正在尝试将数据从 Progress 4GL 数据库中提取到 SQL Server 中。
理想情况下,我想直接在 .NET 中执行此操作,而不是通过 ODBC 驱动程序,因为正在进行的 ODBC 驱动程序网关不支持多核(至少在我们拥有的版本上)。
您知道如何从 .NET 连接到 Progress 4GL 数据库(理想情况下使用 C#,但我在这里很灵活...;))?
干杯
缺口
我正在尝试将数据从 Progress 4GL 数据库中提取到 SQL Server 中。
理想情况下,我想直接在 .NET 中执行此操作,而不是通过 ODBC 驱动程序,因为正在进行的 ODBC 驱动程序网关不支持多核(至少在我们拥有的版本上)。
您知道如何从 .NET 连接到 Progress 4GL 数据库(理想情况下使用 C#,但我在这里很灵活...;))?
干杯
缺口
如果您使用 Progress OpenEdge 10.2 或更高版本,您可以将 .NET 控件直接嵌入到 4GL 程序中。但这就像用大锤打苍蝇一样......即使它不是Progress 4GL(编程语言)也是积极的单线程并且不支持多线程.NET控件。
4GL 和 SQL-92 db 引擎(Progress 支持 2 个不同的存储引擎接口)都是多线程的,并且非常乐意利用尽可能多的内核。
但是,您可能有许可限制——“工作组”许可在 v9 和早期 v10 中使用基于信号量的并发算法。(后来的版本使用非常有限的互斥锁(自旋锁)。)“企业”数据库没有这样的限制。
或者,目标系统可能根本没有设置为支持多个 ODBC 连接(数据库管理员应该知道,关键参数是 -Mn、-Ma 和可能的 -Mpb)。
如果我这样做,我认为我会通过针对不同数据段启动多个会话来简单地伪造多线程访问。
如果您使用 Java+JDBC 驱动程序会更容易,从 JDBC 使用 OpenEdge DB 相当简单。
不确定 MS-SQL Server,但 MySQL 有一个数据库迁移,可以通过 JDBC 愉快地连接到 OpenEdge,并为您导入选择或所有表。
我一直发现 Progress ODBC 驱动程序在使用 .NET 时存在缺陷和麻烦,我尽可能避免使用它们。
您还可以使用应用程序服务器,尽管这同样糟糕,它是单线程的,并且您对多线程访问的连接限制有限。如果您选择此选项设置无状态服务。
我迟到了,但认为建议一些东西可能很有用......
您可以使用 .NET 编写业务逻辑,并使用 OpenEdge Open Client 代理插入数据。如果您在代理周围构建了一个很好的边界(数据访问)层,并且代理只是提取 .NET 中的 BL 将使用的数据,那么在某些时候您应该能够将其交换出去。如果您现有的应用程序庞大且笨重,这将使其难以分层,这将更加困难。这也假设您正在使用 Progress Appservers。
如果您不使用应用服务器,那么您仍然可以在 .NET 中编写数据访问并将其包装在一组可调用的包装器中……这些可以直接从您的 4GL“客户端代码”中调用。在这种方法中,迁移到 SQL Server 会有点困难,但是,它可能会朝着您想要的方向前进。
祝你好运!
我知道这有点像线程死灵法,但如果某个可怜的灵魂正在寻找答案,这就是我使用 CQRS 和 .NET 的方法。
Once we could consume JSON, the data access became quick and multi-threaded.
当您想将数据迁移到 Microsoft SQL Server 时,首先应该查看SQL Server Integration Services 。如果您想在 .NET 中编写转换规则,请查看Npgsql 提供程序。它甚至支持ADO.NET Entity Framework,因此开发迁移应用程序应该很容易。
I am very late with an answer to this question, but if anybody is looking to do this I would head straight for the sqldump utility in openedge. Dumps out the contents of tables directly to text. Very fast. You can also dump out the structure with another tool, so then you could write code to interrogate the structure file, and load data from the text file into your SQL table(s).