1

非常に古いバージョンの Informix (SE) を使用しています。CRUD プロシージャを処理するために C# で ORM タイプのフレームワークを作成しようとしています。SERIAL フィールドを含むテーブルを処理する方法を考え出すのに苦労しています。

基本的に、レコードを挿入したときに一意であると合理的に確信できる一意の値を作成するか、少なくとも挿入したばかりのレコードの値を取得したいと考えています。これは、多くのユーザーが同時にテーブルを使用している場合に機能する必要があります (データベース全体のスキーム)。

新しいバージョンにはセットアップ可能な「シーケンス」オブジェクトがありますが、SE にはありません。

4

1 に答える 1

2

参考までに: Informix ODBC ドライバーと .NET ドライバーは正式に SE をサポートしていません。それでも機能する場合があります。SE に関する私の知識も限られています。以下にリストする情報は、SE よりも IDS に関連している可能性があります。

試しているドライバーは.NET Framework Data Provider for ODBCです。Informix シリアル データ型ではうまく機能しません。Informix ネイティブ .NET プロバイダはIDS でシリアルをサポートしていますが、このドライバは SE に対してテストされていません。リスクを冒しても構わないと思っている場合は、これで成功する可能性が高くなる可能性があります.

サーバーでシリアル値を一意にするために複雑なアルゴリズムを使用する必要はないと思います。次の例は、それをよりよく説明します。

    CREATE TABLE tab ( c1 SERIAL );
    INSERT INTO tab VALUES ( 0 ); 
    INSERT INTO tab VALUES ( 4 );  
    INSERT INTO tab VALUES ( 0 ); 
    INSERT INTO tab VALUES ( 3 ); 
    INSERT INTO tab VALUES ( 3 );
    INSERT INTO tab VALUES ( 0 ); 
    SELECT * FROM tab;

     1
     4
     5
     3
     3
     6


DROP TABLE tab;
CREATE TABLE tab ( c1 INT, c2 SERIAL PRIMARY KEY );
INSERT INTO tab VALUES ( 11, 0 );
INSERT INTO tab VALUES ( 12, 0 );
INSERT INTO tab VALUES ( 13, 0 );
INSERT INTO tab VALUES ( 14, 0 );
INSERT INTO tab VALUES ( 15, 0 );
SELECT * FROM TAB;

c1          c2

11           1
12           2
13           3
14           4
15           5

DataTable に追加されたエントリなど、クライアント側で生成されたシリアル型の値を取得しようとしている場合は、DataColumnの次のプロパティが役立つ場合があります: AutoIncrementAutoIncrementStepAutoIncrementSeed

于 2013-03-15T05:24:37.803 に答える