1

我们使用非常旧版本的 Informix (SE)。我正在尝试在 C# 中创建一个 ORM 类型框架来处理 CRUD 过程。我很难想出一种方法来处理包含 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 回答