我们使用Informix (SE)的一个非常旧的版本。我正在尝试用C#创建一个ORM型框架来处理CRUD过程。我很难想出一种方法来处理包含序列字段的表。
基本上,我希望以某种方式创建一个唯一的值,当我插入一条记录时,我可以合理地确定它仍然是唯一的,或者至少获得我刚刚插入的记录的值。如果多个用户同时使用该表,则必须这样做(因此这是一个数据库范围的方案)。
我知道较新的版本有可以设置的“序列”对象,但SE没有。
发布于 2013-03-15 13:24:38
仅供参考:Informix ODBC驱动程序和.NET驱动程序不正式支持SE;但它仍然可以工作。我对SE的了解也是有限的;下面列出的信息可能与IDS比SE更相关。
您正在尝试的驱动程序是用于ODBC的Informix框架数据提供程序;它不能很好地处理串行数据类型。Informix .NET Provider支持中的串行,但该驱动程序从未针对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上的以下属性可能很有用:AutoIncrement,AutoIncrementStep,AutoIncrementSeed.
https://stackoverflow.com/questions/15414546
复制相似问题