2010-01-18 68 views
1

我试图将数据从Progress 4GL数据库中移出到SQL Server中。Progress 4GL和.Net

理想情况下,我想直接在.NET中执行此操作,而不是通过ODBC驱动程序,因为Progress中的ODBC驱动程序网关不支持多核(至少在我们的版本中)。您知道如何从.NET连接到Progress 4GL数据库(理想情况是在C#中,但我在这里很灵活...))?

干杯

尼克

回答

2

如果您使用Progress OpenEdge 10.2或更高版本,则可以将.NET控件直接嵌入到4GL程序中。但是,这就像是用一个斯莱特哈默扑打苍蝇...... 即使它不是Progress 4GL(编程语言)是积极的单线程,并且不会支持多线程的.NET控件。

4GL和SQL-92数据库引擎(Progress支持2个到存储引擎的不同接口)都是多线程的,并且非常乐意利用尽可能多的核心。

可能但是,有许可限制 - “工作组”许可证在v9和v10版本中使用基于信号量的并发算法。 (更高版本使用非常有限的互斥锁(自旋锁定)。)“企业”db没有这种限制。

或者目标系统可能没有被设置为支持多个ODBC连接(db管理员应该知道,关键参数是-Mn,-Ma和可能是-Mpb)。

如果我这样做,我认为我会通过针对不同数据段启动多个会话来伪造多线程访问。

+0

嗯..我喜欢'针对不同部分的多个ODBC会话'的想法。没有想到...干杯! – 2010-01-18 16:39:04

0

起初,当你想将数据迁移到Microsoft SQL Server之前,应看看SQL Server Integration Services。如果您想在.NET中编写转换规则,请查看Npgsql provider。它甚至支持ADO.NET Entity Framework,因此开发移植应用程序应该很容易。

+0

感谢您的及时回复,但我不知道该供应商Npgsql的,将有助于为多数民众赞成Postgres的,不进步.....;) – 2010-01-18 14:52:08

+0

我把它读作Postgres的...只是编辑您的问题.. 。:由于4GL,DI已经暂停。 – 2010-01-18 15:02:50

1

如果您使用Java + JDBC驱动程序,那么从JDBC开始使用OpenEdge DB非常简单。

不确定MS-SQL Server,但MySQL有一个数据库迁移,可以通过JDBC快速连接到OpenEdge并为您导入选择或所有表。

我总是发现Progress ODBC驱动程序越野车和.NET的麻烦,我尽可能避免它们。

您还可以使用应用程序服务器,但这同样很糟糕,它是单线程的,并且您对多线程访问的连接限制有限。如果你确实选择这个选项设置无状态服务。

1

我来晚了,但认为它可能是有用的建议东西...

可以使用.NET编写业务逻辑和插入使用OpenEdge的Open Client代理您的数据。如果在代理周围建立一个良好的边界(数据访问)层,代理只会提取.NET中BL所使用的数据,那么在某些时候您应该可以将其交换出去。如果您现有的应用程序非常庞大而笨重,那么这将会变得更加困难,从而导致难以对其进行分层。这也假定您正在与进度Appservers合作。

如果您没有使用appservers,那么您仍然可以在.NET中编写数据访问,并将其包装在一系列可调用的包装中......这些可以从您的4GL“客户代码”直接调用。在这种方法中,迁移到SQL Server将会有点困难,但仍然可能会让你朝你想要的方向发展。

祝你好运!

1

我知道这是一个线程necromancy位,但如果一些可怜的灵魂正在寻找答案,这是我用CQRS和.NET做的。

  • 我写了Progress命令和查询来执行我们的数据操作。
  • 命令和查询都通过调用一个命令或查询调度
    • 调度员是从WEBSPEED服务器访问通过.NET访问。
    • 调度程序接受了命令或查询名称和表单数据。
    • 调用命令或查询名称,并且对于查询分派器,期望返回一个临时表句柄。
    • 当查询返回temp-table句柄时,查询调度程序将其内容作为JSON写入到webstream中。

一旦我们能够使用JSON,数据访问变得快速和多线程。

0

我对这个问题的答案已经很晚了,但是如果有人想要这样做,我会直接打开sqldump实用程序。将表格的内容直接转储为文本。非常快。你也可以用另一个工具转储结构,这样你就可以编写代码来查询结构文件,并将文本文件中的数据加载到你的SQL表中。