2008-09-30 1 views
0

Я использую поставщик C# и Microsoft.Jet.OLEDB.4.0 для вставки строк в Access mdb.Вставьте строки в Access db из C#, используя Microsoft.Jet.OLEDB.4.0, столбец autonumber установлен на ноль

Да, я знаю, Доступ отстой. Это огромное унаследованное приложение, и все остальное работает нормально.

В таблице есть столбец автозвука. Я вставляю строки, но столбец autonumber равен нулю.

Я рассмотрел вопрос и прочитал все статьи, которые я смог найти по этому вопросу. Один предложил вставить -1 для столбца autonumber, но это не сработало. Ни один из других предложений, которые я мог найти, не работал.

Я использую OleDbParameter, а не конкатенацию большой текстовой строки SQL.

Я пробовал вставку с транзакцией и без нее. Нет разницы.

Как заставить эту вставку работать (т. Е. Правильно установить содержимое столбца автонабора)?

Большое спасибо заранее,

Адам Leffert

ответ

2

В Access можно ввести Явное значение в столбец IDENTITY (a.k.a. Automnumber). Если вы (или ваше промежуточное программное обеспечение) записываете нулевое значение в столбец IDENTITY, и нет уникального ограничения в столбце IDENTITY, то это может объяснить это.

Просто чтобы быть ясно, что вы должны использовать синтаксис

INSERT INTO (<column list>) ... 

и список столбцов должны пропустить столбец IDENTITY. Jet SQL позволит вам опустить весь список столбцов, но затем неявно включает столбец IDENTITY. Поэтому вы должны использовать синтаксис INSERT INTO(), чтобы явно опустить столбец IDENTITY.

В Access/Jet вы можете записать явные значения в столбец IDENTITY, и в этом случае значение, очевидно, не будет автоматически сгенерировано. Поэтому убедитесь, что вы и ваше промежуточное ПО (ADO.NET и т. Д.) Явно не указали нулевое значение в столбце IDENTITY.

КСТАТИ только для столбца идентификаторов в таблице ниже будет автоматически генерировать нулевое значение каждый второй вставки:

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

При выполнении вставки, вы должны быть уверены, что вы не указываете значение для столбца AutoNumber. Как и в SQL Server, вы не вставляете значение для столбца идентификации.