Я осмотрелся и нашел много ответов на это для других типов БД, но ничего для доступа.
Я объединяю несколько файлов доступа в один файл прямо сейчас. Все работало нормально, пока я не понял на CREATE TABLE
, что я забыл определить первичный ключ и создать кучу дублированных записей при слиянии. Первичный ключ в этих файлах - GUID. Так как бы я теперь обработал дубликаты?
Вот текущее создание:
CREATE TABLE [PRODUCE] ([PRODUCE_ID] VARCHAR(255) NOT NULL PRIMARY KEY, [PRODUCE_TYPE] VARCHAR(255) NOT NULL, [PRODUCE_LINK] DOUBLE NOT NULL)
А вот текущее значение SELECT и INSERT:
SELECT PRODUCE_ID, PRODUCE_TYPE, PRODUCE_LINK FROM PRODUCE
INSERT INTO [PRODUCE] ([PRODUCE_ID], [PRODUCE_TYPE], [PRODUCE_LINK]) VALUES(@PRODUCE_ID, @PRODUCE_TYPE, @PRODUCE_LINK)
Ошибка В настоящее время я делаю так: «Запрошенные вами изменения в таблице не увенчались успехом, поскольку они приводят к дублированию значений в индексе, первичном ключе или отношении. Измените данные в поле или полях, которые содержат повторяющиеся данные, удалите индексировать или переопределить индекс, чтобы разрешить повторяющиеся записи, и повторите попытку. "
Редактировать: добавлен весь раздел кода, где это делается.
OleDbConnection produceSource = new OleDbConnection(produceSourceString);
OleDbConnection produceDestination = new OleDbConnection(produceFinalString);
produceDestination.Open();
OleDbCommand cmdBSSource = produceSource.CreateCommand();
cmdBSSource.Connection = produceSource;
cmdBSSource.CommandText = "SELECT PRODUCE_ID, PRODUCE_TYPE, PRODUCE_LINK FROM PRODUCE";
OleDbCommand cmdBSDestination = produceDestination.CreateCommand();
cmdBSDestination.Connection = produceDestination;
cmdBSDestination.CommandText = @"INSERT INTO [PRODUCE] ([PRODUCE_ID], [PRODUCE_TYPE], [PRODUCE_LINK]) " +
@"VALUES(@PRODUCE_ID, @PRODUCE_TYPE, @PRODUCE_LINK)";
OleDbParameter param1 = new OleDbParameter("@PRODUCE_ID", OleDbType.VarChar);
cmdBSDestination.Parameters.Add(param1);
OleDbParameter param2 = new OleDbParameter("@PRODUCE_TYPE", OleDbType.VarChar);
cmdBSDestination.Parameters.Add(param2);
OleDbParameter param3 = new OleDbParameter("@PRODUCE_LINK", OleDbType.Double);
cmdBSDestination.Parameters.Add(param3);
produceSource.Open();
OleDbDataReader readerBS = cmdBSSource.ExecuteReader();
while (readerBS.Read())
{
param1.Value = readerBS[0].ToString();
param2.Value = readerBS[1].ToString();
param3.Value = readerBS[2].ToString();
cmdBSDestination.ExecuteNonQuery();
}
produceDestination.Close();
produceSource.Close();