Как сравнить 2 одинаковые таблицы в 2 разных базах данных MS Access в C #? - PullRequest
3 голосов
/ 08 сентября 2010

Меня попросили создать инструмент для рабочего стола, чтобы сравнить старую базу данных доступа с более новой "обновленной" базой данных доступа и создать файл excel для всех новых или измененных записей.

таблицы БД, которые мне нужно сравнитьструктурированы
Первичный ключ |Описание.

Я создал простую форму Windows, которая позволяет пользователю выбирать старые и новые базы данных, и я выяснил, как открывать базы данных и выполнять SQL-запросы к ним, однако я застрял на том, каксделать сравнение, не делая тысячи вызовов SQL для каждой БД.

С SQL-сервером и веб-сервером я бы уже закончил, но создание этого приложения в качестве настольного приложения и MS Access меня немного смущает.

Ответы [ 4 ]

2 голосов
/ 08 сентября 2010

Это то же самое в Access, как и в SQL Server. Просто напишите запрос, который сделает сравнение за вас:

select t1.key, t1.description, t2.description
 from t1
   full outer join t2 on t1.key=t2.key
 where t1.description <> t2.description
    or t1.description is null
    or t2.description is null;

Будет создан список всех записей с одинаковыми ключами, но разными значениями. Затем просто выведите набор записей в файл, в таблицу или в другое место.

Вы также можете сделать пользовательский интерфейс для этого в чистом MS Access и полностью пропустить часть C #. Тогда это будет очень быстро, и MS Access очень хорош для создания собственных интерфейсов.

0 голосов
/ 09 сентября 2010

Вот как я это сделал.

Я получил информацию о файлах старой и новой базы данных от пользователей в простой форме. Затем я открываю базу данных Olddatabase и добавляю каждую запись в словарь «dictionaryOld», используя код из ответа Ахмада Магеда . Затем я создал второй словарь «dictionaryNew» для хранения записей, которые были новыми или изменены. Я перебрал новую базу данных и сравнил каждую запись со словарем, добавив записи, которые не существовали или были изменены.

Я уверен, что есть гораздо лучшие способы сделать это, но похоже, что это работает для того, что мне нужно, спасибо всем, что указали мне направление!

Теперь разберемся, как записать это в файл и перехватить ошибки и т.д. ...

Вот код

    Removed source, new and improved version comming....
0 голосов
/ 08 сентября 2010

Если вы используете .Net Framework 3.5 или выше, один из способов - создать два списка и поместить записи из двух БД для сравнения в эти два списка.После этого вы можете использовать методы расширения Linq Except и Union, чтобы быстро найти различия в двух наборах.См. здесь для этих методов расширения.

0 голосов
/ 08 сентября 2010

Вы застряли с выбором технологий пользователем? Если есть только одна старая база данных и одна новая для сравнения, вам не нужно приложение для ПК. Он понадобится вам, если есть несколько старых и новых.

Вы можете импортировать базы данных Access в SQL Server, если это поможет.

Также рассмотрите возможность создания третьей базы данных Access со ссылками на таблицы в первых двух. Тогда у вас есть оба набора данных в одном месте, и вы можете написать запросы для их сравнения.

Идея та же, переносите ли вы их в память или на SQL Server, просто отслеживать запросы на бэкэнде, а не в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...