我们使用非常旧版本的Informix(SE)。我试图在C#中创建一个ORM类型的框架来处理CRUD程序。我正在努力想出一种处理包含SERIAL字段的表的方法。
基本上我想以某种方式创建一个唯一的值,当我插入一条记录或者至少得到我刚插入的记录的值时,我可以合理地确定它仍然是唯一的。如果许多用户同时使用该表(这是一个数据库范围的方案),这必须有效。
我知道较新版本的'序列'对象可以设置但SE不能。
答案 0 :(得分:2)
仅供参考: Informix ODBC驱动程序和.NET驱动程序不正式支持SE ;它可能仍然有效。 我对SE的了解也很有限;我在下面列出的信息可能与ID相关,而不是SE。
您正在尝试的驱动程序是用于ODBC的.NET Framework数据提供程序;它与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 上的以下属性可能会有用: 的自动递增下, 的 AutoIncrementStep 下, 的 AutoIncrementSeed 强>