Мне нужно реплицировать базу данных 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
Спасибо
Нет лучшего решения? У меня есть ~ 80 таблиц для вставки, так что вы можете написать много запросов. –
@AlexB: Вы можете попробовать изменить созданный 'CommandText'' '' '' '' '' '' ''' '' '' '' '' '' '' ''. – SLaks
Я мог бы, но у меня нет способа узнать, имеет ли текущая таблица поле AutoNumber (помните, что у меня есть ~ 80 таблиц для вставки). 'DataSet.Tables [0] .Columns [" IdReport "]. AutoIncrement' возвращает false и' DataSet.Tables [0] .Columns ["IdReport"]. AllowDbNull' возвращает true для моего столбца AutoNumber. Я предполагаю, что это позволит серверу вставить правильное значение. –