#c# #compare
#c# #Сравнить
Вопрос:
Работаю над любимым проектом, касающимся эффективности и данных, и это заявление о миссии:
У меня есть база данных Access с x количеством таблиц, каждая из которых содержит от 2000 до максимум около 15000 записей в формате [отгрузка] [коробка] [серийный номер] [название] [регион]. Теперь у меня есть другая таблица (называемая Bluuur) с n количеством записей, и я хотел бы сравнить эту таблицу (содержит сериалы) со всеми таблицами в Access DB и вернуть серийные совпадения вместе с именем записи, которая соответствовала. Таким образом, результат должен быть примерно таким: Timmy 360 (для сравнения, в котором у Timmy было 360 совпадений с Bluuur)
примечание: Я разрабатываю приложение для этого
Ответ №1:
Я бы использовал OleDbConnection со строкой подключения, подобной:
OleDbConnection connToFile = new OleDbConnection(String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""Excel 8.0;HDR=Yes"";", fileName));
Аналогично для MS Access. Затем загрузите обе таблицы в память и сравните.
Обновить Хорошо, извините, что я не получил ответа на ваш вопрос изначально. Ответ будет в большей степени зависеть от требований:
- Таблица в XLS статическая или динамическая? Если это статический файл, импортируйте XLS в MS Access, а если вам просто нужно получить значения для собственного использования, используйте редактор запросов для выбора и объединения таблиц, например: select a.Name подсчитайте(b.ID ) из таблицы a внутреннее объединение TableB b в a.Name = b.Name группировать по a.Name
- Если таблица в XLS динамическая, но вам снова нужно работать с ней для ваших собственных целей, создайте связанный источник данных в MS Access для этого файла XLS и еще раз используйте редактор запросов для выполнения выбора.
- Если целью всего этого является создание веб-страницы / приложения, которое будет подключаться как к Microsoft Access, так и к XLS и будет объединять данные, и будет делать это регулярно, у вас есть 2 потенциальных решения: сделать это в памяти или сделать это с помощью сохраненного запроса, а затем использовать OleDbConnection / OleDbDataAdapter для загрузки данных в приложение и отображения их пользователю. Подход с использованием памяти может быть не лучшим по производительности, поэтому напишите запрос MS Access, который объединит и сгруппирует данные так, как вам нужно, и используйте OleDbConnection для подключения MDB-файла MS Access и выполнения запроса. ИЛИ, если вам нужно сделать это для нескольких таблиц в MS Access, напишите текст запроса самостоятельно непосредственно в коде, выполните для каждого соединения, а затем суммируйте результаты.
Комментарии:
1. -1 OP спрашивал, как провести сравнение. Вы просто повторили его вопрос.
2. @peter-r разве ты не хочешь дать ему больше времени на доработку?
3. @ariel Конечно! Было бы здорово, если бы он мог уточнить, но я не могу изменить свой голос, пока ответ не будет отредактирован (прошло более 6 минут).
4. Да, 1-й пост вопроса был дерьмовым, поэтому я переписал его, чтобы он лучше объяснял
5. Или не быть полностью уверенным, как задать вопрос, когда вы задаете указанный вопрос, а затем улучшить его после прочтения того, что вы написали, отсюда «редактировать»
Ответ №2:
Если я неправильно понял, то одной таблицы (с которой вам нужно сравнить) нет в базе данных MS Access. Быстрое решение выглядит следующим образом: импортируйте таблицу «Bluur» в базу данных Access (скорее всего, это возможно с помощью Access import data wizard). Теперь вы можете использовать простые запросы объединения для тестирования всех других таблиц в БД.
Комментарии:
1. Ну, очевидно, вам нужно написать программу, которая будет подключаться к базе данных, выполнять все объединения, оценивать и отображать результаты.