Используется
C#
MySql
Имеется
Таблица 1 - редактируемая
Таблица 2 - шаблон
Сценарий
В процессе работы программы таблица "Таблица 1" подвергается редактированию.
Редактирование может заключаться в следующем:
- в "Таблица 1" количество записей равно нулю (т.е. пуста);
- в "Таблица 1" количество записей больше чем в "Таблица 2";
- в "Таблица 1" количество записей меньше чем в "Таблица 2";
- в "Таблица 1" содержание записей отличается от "Таблица 2";
Количество и наименование столбцов всегда одинаково в обеих таблицах.
Вопрос
Как отследить несоответствия в "Таблица 1" по отношению к "Таблица 2"?
Состав несоответствий:
- 1. в "Таблица 1" количество записей равно нулю (т.е. пуста);
- 2. в "Таблица 1" количество записей больше чем в "Таблица 2";
В результате вывести лишние записи таблицы "Таблица 1"
- 3. в "Таблица 1" количество записей меньше чем в "Таблица 2";
В результате вывести записи которые есть в "Таблица 2", но отсутствуют в "Таблица 1"
- 4. в "Таблица 1" содержание записей отличается от "Таблица 2";
Таблицы
Таблица 1 (редактируемая)
+--------+-----------------+-----------------+-----------------+
| ID_ТБЛ| pole_1 | pole_2 | pole_3 |
+--------+-----------------+-----------------+-----------------+
| 1 | pole_1_запись_1 | pole_2_запись_1 | pole_3_запись_1 |
| 2 | pole_1_запись_2 | pole_2_запись_2 | pole_3_запись_2 |
| 3 | pole_1_запись_3 | pole_2_запись_3 | pole_3_запись_3 |
+--------+-----------------+-----------------+-----------------+
Таблица 2 (ШБЛ)
+--------+-----------------+-----------------+-----------------+
| ID_ТБЛ | pole_1 | pole_2 | pole_3 |
+--------+-----------------+-----------------+-----------------+
| 1 | pole_1_запись_1 | pole_2_запись_1 | pole_3_запись_1 |
| 2 | pole_1_запись_2 | pole_2_запись_2 | pole_3_запись_2 |
| 3 | pole_1_запись_3 | pole_2_запись_3 | pole_3_запись_3 |
+--------+-----------------+-----------------+-----------------+
SELECT COUNT(*) FROM table2;
SELECT CASE WHEN c1>c2 THEN 'В таблице 1 больше записей, чем в таблице2'
WHEN c1<c2 THEN 'В таблице 1 меньше записей, чем в таблице2'
ELSE 'Да всё нормально с количеством записей'
END diag
FROM (SELECT COUNT(*) c1 FROM table1) t1,
(SELECT COUNT(*) c2 FROM table2) t2
SELECT t1.*, t2.*
FROM table1 t1,table2 t2
WHERE t1.id=t2.id
AND (t1.pole_1,t1.pole_2,t1.pole_3)
NOT IN ((t2.pole_1,t2.pole_2,t2.pole_3))
UPD:
SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id=t2.id
WHERE t2.id IS NULL
SELECT t1.*
FROM table2 t1
LEFT JOIN table1 t2 ON t1.id=t2.id
WHERE t2.id IS NULL
Для начала вам нужен провайдер данных, например MySql connector. Скачайте и добавьте в проект. Подключайтесь к базе данных используя скачанную библиотеку.
string myConnectionString = "server=127.0.0.1;uid=root;pwd=12345;database=test;";
conn = new MySql.Data.MySqlClient.MySqlConnection(myConnectionString);
conn.Open();
Напишите команду, используя SQL из соседнего ответа, либо запросите таблицу полностью и сравнивайте уже в коде.
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "SELECT * FROM Table1";
cmd.Connection = conn;
MySqlDataReader reader = cmd.ExecuteReader();
Считывайте результат построчно, можно, например, в List
.
var result = new List<object>();
while (reader.Read())
{
result.Add(new {reader[0], reader[1], reader[2]});
}
Уходя, выключайте свет.
conn.Close();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Все события сенсорного взаимодействия порождают соответствующие события мышиТак, для Grid достаточно подписаться на MouseDown (можно как на Right button,...
Допустим у меня есть некий ComboBox, у которого будет задача не по назначениюДопустим первый элемент этого ComboBox должен быть всегда надпись "Выберите...
В общем, есть ListBox, мне нужно проверить, если в нем есть элементы, то должна выполниться функция, если он пустой, то ничего не должно происходить