ODBC与Oracle触发器键列

时间:2011-11-23 17:19:53

标签: oracle odbc c#-2.0

我正在尝试更新一些应该通过ODBC将数据写入各种数据库(SQL,Access,Oracle)的现有代码,但是我遇到了一些Oracle问题并且正在寻找任何建议。

我使用Trigger设置我的Oracle数据库(在线基础教程,我想支持)。

CREATE TABLE TABLE1 (
    RECORDID NUMBER      NOT NULL PRIMARY KEY,
    ID       VARCHAR(40) NULL,
    COUNT    NUMBER      NULL

);
GO

CREATE SEQUENCE TABLE1_SEQ 
GO

CREATE or REPLACE TRIGGER TABLE1_TRG
BEFORE INSERT ON TABLE1
FOR EACH ROW
    WHEN (new.RECORDID IS NULL)
    BEGIN
        SELECT TABLE1_SEQ.nextval 
        INTO :new.RECORDID 
        FROM dual;
    end;
GO

然后我使用SELECT * FROM TABLE1填充DataTable。第一个问题是此DataTable不知道RecordId列是自动生成的。如果我的表中有数据,那么我就无法改变它,因为我收到错误

  

无法更改类型为“Double”的DataColumn的AutoIncrement   有数据。

如果我继续,忽略这一点,那么我很快就会卡住。如果我创建一个新的DataRow并尝试插入它,我不能将RecordID设置为DBNull.Value,因为它抱怨该列必须为非null(NoNullAllowedException)。但是我不能自己生成一个值,因为我不知道我应该使用什么值,并且不想通过使用下一个可用值来搞砸触发器。

关于如何在没有ODBC抱怨的情况下插入数据的任何建议?

1 个答案:

答案 0 :(得分:3)

您的第一个问题似乎不是Oracle数据库。 Oracle中没有“Autoincrement”列这样的东西。您确定该消息来自Oracle数据库吗?

使用Oracle,您应该能够在插入主键时提供任何虚拟值,触发器将覆盖它。

您提供的描述中也没有任何内容可以阻止您在Oracle中更新此值(因为您的触发器仅在插入时),除非您有对该键的外键引用。