1

Progress 4GL データベースから SQL Server にデータを取得しようとしています。

理想的には、進行中の ODBC ドライバー ゲートウェイはマルチコアをサポートしていないため (少なくとも私たちが使用しているバージョンでは)、ODBC ドライバーを介してではなく、.NET 内で直接これを実行したいと考えています。

.NET から Progress 4GL データベースに接続する方法を知っていますか?

乾杯

ニック

4

6 に答える 6

3

Progress OpenEdge バージョン 10.2 以降を使用している場合は、.NET コントロールを 4GL プログラムに直接埋め込むことができます。しかし、それはハンマーでハエをたたくようなものです...そして、そうでなかったとしても、Progress 4GL (プログラミング言語) は積極的にシングルスレッド化されており、マルチスレッド化された .NET コントロールをサポートしません。

4GL と SQL-92 db エンジン (Progress はストレージ エンジンへの 2 つの異なるインターフェイスをサポートします) はマルチスレッドであり、所有しているコアの数を最大限に活用できます。

ただし、ライセンス制限がある場合があります。「ワーク グループ」ライセンスは、v9 および初期の v10 でセマフォ ベースの同時実行アルゴリズムを使用します。(後のバージョンでは、非常に制限されたミューテックス (スピン ロック) が使用されます。) 「エンタープライズ」データベースには、そのような制限はありません。

または、ターゲット システムが複数の ODBC 接続をサポートするように設定されていない可能性があります (データベース管理者は知っておく必要があります。重要なパラメーターは -Mn、-Ma、および場合によっては -Mpb です)。

私がこれを行っていたら、データの異なるセグメントに対して複数のセッションを開始することで、マルチスレッド アクセスを偽装するだけだと思います。

于 2010-01-18T15:42:50.193 に答える
1

これはちょっとしたスレッドのネクロマンシーであることは承知していますが、貧しい魂が答えを探している場合は、CQRS と .NET を使用してそれを行った方法を次に示します。

  • データ操作を実行するための Progress コマンドとクエリを作成しました。
  • コマンドとクエリは、コマンドまたはクエリ ディスパッチャを呼び出すことによって .NET からアクセスされました。
    • ディスパッチャーは、Webspeed サーバーからアクセスできました。
    • ディスパッチャは、コマンドまたはクエリの名前とフォーム データを受け取りました。
    • Command または Query 名を呼び出し、クエリ ディスパッチャの場合、一時テーブル ハンドルが返されることを期待していました。
    • クエリが一時テーブル ハンドルを返すと、クエリ ディスパッチャーはその内容を JSON として Web ストリームに書き出しました。

JSON を使用できるようになると、データ アクセスは迅速かつマルチスレッドになりました。

于 2013-02-04T22:11:21.853 に答える
1

Java+JDBC ドライバーを使用すると簡単です。JDBC から OpenEdge DB を操作するのはかなり簡単です。

MS-SQL Server についてはわかりませんが、MySQL には、JDBC 経由で OpenEdge に問題なく接続し、選択またはすべてのテーブルをインポートするデータベース移行機能があります。

私は、Progress ODBC ドライバーがバグが多く、.NET では厄介であることにいつも気付きました。できる限り避けています。

操作するアプリサーバーも用意しましたが、これはシングルスレッドであり、マルチスレッドアクセスの接続制限が制限されているため、これも同様に悪いことです。このオプションを選択する場合は、ステートレス サービスをセットアップします。

于 2010-02-05T06:07:57.737 に答える
0

データをMicrosoftSQLServerに移行する場合は、最初にSQL ServerIntegrationServicesを確認する必要があります。.NETで変換ルールをコーディングする場合は、Npgsqlプロバイダーを参照してください。ADO.NET Entity Frameworkもサポートしているため、移行アプリケーションの開発は非常に簡単です。

于 2010-01-18T14:39:03.203 に答える