我正在尝试将Progress 4GL数据库中的数据导入SQL Server。
理想情况下,我想在.NET中直接执行此操作,而不是通过ODBC驱动程序,因为正在进行的ODBC驱动程序网关不支持多核(至少在我们的版本上)。
你知道如何从.NET连接到Progress 4GL数据库(理想情况下是在C#中,但我在这里很灵活......;))?
干杯
尼克
答案 0 :(得分:2)
如果您使用的是Progress OpenEdge 10.2或更高版本,则可以将.NET控件直接嵌入到4GL程序中。但这就像用雪橇打一只苍蝇...... 即使不是Progress 4GL(编程语言)也是积极的单线程,并且不支持多线程.NET控件。
4GL和SQL-92数据库引擎(Progress支持2个与存储引擎不同的接口)都是多线程的,非常乐意利用尽可能多的内核。
可能但是,有许可限制 - “工作组”许可证在v9和早期版本v10中使用基于信号量的并发算法。 (后来的版本使用非常有限的互斥锁(自旋锁)。)“企业”数据库没有这样的限制。
或者目标系统可能还没有设置为支持多个ODBC连接(数据库管理员应该知道,关键参数是-Mn,-Ma和可能的-Mpb)。
如果我这样做,我认为我会通过针对不同的数据段启动多个会话来伪造多线程访问。
答案 1 :(得分:1)
如果使用Java + JDBC驱动程序会更容易,从JDBC开始,使用OpenEdge DB非常简单。
不确定MS-SQL Server,但MySQL有一个数据库迁移,可以通过JDBC愉快地连接到OpenEdge,并为您导入选择或所有表。
我总是发现Progress ODBC驱动程序错误并且在.NET中遇到麻烦,我尽可能地避免使用它们。
你也有app-server可以使用,虽然这很糟糕,它是单线程的,你将有一个有限的连接限制多线程访问。如果您确实选择此选项设置无状态服务。
答案 2 :(得分:1)
我迟到了,但认为提出建议可能有用......
您可以使用.NET编写业务逻辑,并使用OpenEdge Open Client代理插入数据。如果你在代理周围构建了一个漂亮的边界(数据访问)层,而代理只是提取你的BL将使用的数据,那么在某些时候你应该能够将它交换掉。如果您现有的应用程序庞大且厚实,这将使其难以分层,这将更难。这也假设您正在使用Progress Appservers。
如果您没有使用appservers,那么您仍然可以在.NET中编写数据访问并将其包装在一组可调用的包装器中......这些可以直接从您的4GL“客户端代码”调用。在这种方法中,迁移到SQL Server会有点困难,但仍然可能会让你朝着你想要的方向前进。
祝你好运!答案 3 :(得分:1)
我知道这是一个小位的线程坏死,但如果一些可怜的灵魂正在寻找答案,这就是我用CQRS和.NET做到的。
一旦我们可以使用JSON,数据访问变得快速且多线程。
答案 4 :(得分:0)
首先,当您要将数据迁移到Microsoft SQL Server时,应该查看SQL Server Integration Services。如果要在.NET中编写转换规则,请查看Npgsql provider。它甚至支持ADO.NET Entity Framework,因此开发迁移应用程序应该非常容易。
答案 5 :(得分:0)
我对这个问题的回答很晚,但如果有人想要这样做,我会直接前往openge中的sqldump实用程序。将表的内容直接转储到文本中。非常快。您还可以使用其他工具转储结构,然后您可以编写代码来查询结构文件,并将文本文件中的数据加载到SQL表中。