ms jet ace - 使用 Microsoft.Jet.OLEDB.4.0 从 C# 将行插入 Access db,



我正在使用C#和Microsoft.Jet.OLEDB.4.0提供程序将行插入Access mdb。

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

该表具有自动编号列。 我插入行,但自动编号列设置为零。

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

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

我已经尝试过有和没有交易的插入。 没有区别。

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

提前非常感谢,

亚当·莱弗特

在 Access 中,可以将显式值插入到 IDENTITY(又名 Automnumber)列中。如果您(或您的中间件)将值零写入 IDENTITY 列,并且 IDENTITY 列上没有唯一约束,那么这可能会解释它。

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

INSERT INTO (<column list>) ... 

并且列列表应省略"标识"列。Jet SQL 将允许您省略整个列列表,但随后隐式包含 IDENTITY 列。因此,应使用 INSERT INTO () 语法显式省略 IDENTITY 列。

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

顺便说一句,仅针对下表中的 IDENTITY 列将每秒插入一次自动生成值零:

CREATE Table Test1 
(
   ID INTEGER IDENTITY(0, -2147483648) NOT NULL, 
   data_col INTEGER
);

执行插入时,需要确保未为"自动编号"列指定值。 就像在 SQL Server 中一样,您不会为标识列插入值。

相关内容

  • 没有找到相关文章

最新更新