【问题标题】:Serial Fields in Informix for ORM framework用于 ORM 框架的 Informix 中的串行字段
【发布时间】:2013-03-14 16:13:32
【问题描述】:

我们使用非常旧的 Informix (SE) 版本。我正在尝试在 C# 中创建一个 ORM 类型框架来处理 CRUD 过程。我很难想出一种方法来处理包含 SERIAL 字段的表。

基本上,我想以某种方式创建一个唯一值,我可以合理地确定在我插入记录时仍然是唯一的,或者至少获得我刚刚插入的记录的值。如果许多用户同时使用该表,这必须有效(因此是数据库范围的方案)。

我知道较新的版本具有可以设置的“序列”对象,但 SE 没有。

【问题讨论】:

  • Informix ODBC 驱动程序提供了一种获取插入序列号的方法; ESQL/C 也可以(在 sqlca 结构中)。你能从 C# 中得到任何东西吗?您使用的是哪个版本的 Informix SE?您在哪个平台上使用它?
  • 我在 IBM 的网站上试过,但显然我的 SE 版本不支持 sqcla。 publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/…
  • 实际上,我和我们的 db 人员谈过,它仅在 unix 4gl/4ge 中支持。我正在尝试在 Windows 中使用 csharp。
  • SE 支持sqlca;它在 1985 年首次发布时就做到了,从那时起就一直如此。但是,AFAIK,SE 根本不支持DBINFO(),更不用说DBINFO()sqlca 部分了。查看 Informix(动态服务器)手册以获取有关 SE 的信息将会很困难。 (我将从SE home page 开始。)您的C# 框架正在使用哪个底层API;你用什么来建立与 SE 的连接? .NET 驱动程序?还是 ODBC 驱动程序?还是别的什么?
  • 我们使用 OdbcConnection 对象连接数据库。根据连接字符串,我们使用的是 {IBM INFORMIX ODBC DRIVER} 驱动程序、sqlexec 服务和 sesoctcp 协议。

标签: sql informix


【解决方案1】:

仅供参考:Informix ODBC 驱动程序和 .NET 驱动程序不正式支持 SE;它可能仍然有效。 我对 SE 的了解也很有限;我在下面列出的信息可能对 IDS 比 SE 更相关。

您正在尝试的驱动程序是 .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 上的以下属性可能有用: 自动增量AutoIncrementStep自动增量种子

【讨论】:

  • 非常感谢您提供的信息。不幸的是,这家商店坚持使用很多遗留代码,包括 VB6(这是我在业余时间尝试替换的代码)。 VB6 不能使用 64 位驱动程序。他们(最终)计划将数据库升级到 IDS,但他们不会强迫现有客户升级。
  • 我想我将放弃并禁止对索引中包含 SERIAL 字段的表进行任何插入操作。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多