代码之家  ›  专栏  ›  技术社区  ›  MindModel

使用Microsoft.Jet.OLEDB.4.0将行从C#插入Access数据库,自动编号列设置为零

  •  0
  • MindModel  · 技术社区  · 18 年前

    是的,我知道访问很糟糕。这是一个巨大的遗留应用程序,其他一切正常。

    我用谷歌搜索了这个问题,并阅读了我能找到的关于这个问题的所有文章。有人建议在“自动编号”列中插入-1,但这不起作用。其他我能找到的建议都不管用。

    我使用的是OLEDBPParameter,而不是连接一个大的SQL文本字符串。

    我试过插入,有交易和没有交易。没有区别。

    如何使此插入生效(即正确设置自动编号列内容)?

    亚当·莱弗特

    2 回复  |  直到 16 年前
        1
  •  2
  •   onedaywhen    18 年前

    在Access中,可以将显式值插入标识(又称Automnumber)列。如果您(或您的中间件)正在将值0写入标识列,并且标识列上没有唯一的约束,那么这可能解释了这一点。

    为了清楚起见,您应该使用语法

    INSERT INTO (<column list>) ... 
    

    列列表应省略标识列。JETSQL将允许您省略整个列列表,但会隐式地 包括 标识列。因此,应该使用INSERT-INTO()语法显式省略标识列。

    在Access/Jet中,您可以将显式值写入标识列,在这种情况下,该值显然不会自动生成。因此,请确保您和您的中间件(ADO.NET等)没有显式地将零值写入标识列。

    顺便说一句,下表中的标识列将每秒自动生成值零插入:

    CREATE Table Test1 
    (
       ID INTEGER IDENTITY(0, -2147483648) NOT NULL, 
       data_col INTEGER
    );
    
        2
  •  0
  •   Mitchel Sellers    18 年前

    推荐文章