0

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

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

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

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

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

我已经尝试过有交易和没有交易的插入。没有不同。

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

首先十分感谢,

亚当莱弗特

4

2 回答 2

2

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

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

INSERT INTO (<column list>) ... 

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

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

顺便说一句,下表中的 IDENTITY 列将每秒自动生成零值 INSERT:

CREATE Table Test1 
(
   ID INTEGER IDENTITY(0, -2147483648) NOT NULL, 
   data_col INTEGER
);
于 2008-10-01T14:16:59.847 回答
0

进行插入时,您需要确保没有为 AutoNumber 列指定值。就像在 SQL Server 中一样,您不会为标识列插入值。

于 2008-09-30T13:35:39.033 回答