2010-11-16 2 views
0

Мне нужно реплицировать базу данных MS Access в .NET через XML-файл, который я получаю через Интернет. Целевая база данных должна быть точно такой же, как оригинал (тот же контент и те же PK).Вставка AutoNumber с OleDbDataAdapter

Поскольку у меня есть много таблиц для копирования, я использую OleDbDataAdapter, который генерирует запросы на вставки для меня. Это хорошо работает даже для таблиц, в которых в качестве основного ключа используется автогенератор Guid. Команда INSERT, сгенерированная OleDbCommandBuilder (cmdBuilder.GetInsertCommand()), имеет поле Guid в своих параметрах, поэтому вложенный указатель совпадает с исходной БД.

Единственная проблема, с которой я столкнулся, - это таблицы с целым числом автонамера в качестве основного ключа. Созданная команда INSERT не включает поле PK, поэтому вставленный номер не соответствует исходной базе данных, если в последовательности есть отверстия.

Есть ли скрытое свойство, которое будет содержать столбец автонабора при создании команды вставки?

Вот мой код:

public void InsertContentFromXml(string tableName, string xml) 
{ 
    using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", _connection)) 
    { 
     OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter); 
     OleDbCommand insertCommand = builder.GetInsertCommand(); 
     // insertCommand does not have the autonumber column in its insert query 
    } 
} 

В таблице есть 3 поля:
IdReport [целое число/AutoNumber]
ReportName [Текст]
ReportType [Текст]

Команда вставки генерирует 2 параметры: ReportName и ReportType

Спасибо

ответ

0

Вам необходимо создать команду INSERT и ее параметры самостоятельно.

+0

Нет лучшего решения? У меня есть ~ 80 таблиц для вставки, так что вы можете написать много запросов. –

+0

@AlexB: Вы можете попробовать изменить созданный 'CommandText'' '' '' '' '' '' ''' '' '' '' '' '' '' ''. – SLaks

+0

Я мог бы, но у меня нет способа узнать, имеет ли текущая таблица поле AutoNumber (помните, что у меня есть ~ 80 таблиц для вставки). 'DataSet.Tables [0] .Columns [" IdReport "]. AutoIncrement' возвращает false и' DataSet.Tables [0] .Columns ["IdReport"]. AllowDbNull' возвращает true для моего столбца AutoNumber. Я предполагаю, что это позволит серверу вставить правильное значение. –

Смежные вопросы