2010-01-18 44 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表中。

相關問題