Как мне пакетно обновить базу данных sqlite с одной таблицей - PullRequest
0 голосов
/ 17 января 2020

У меня есть несколько вопросов в моей работе.

Я пишу систему управления информацией, которая отображает информацию из базы данных.

Одной из функций программного обеспечения является возможность экспорта отображаемую информацию как EXCEL, а затем пользователь может изменить информацию в EXCEL, например, в столбце имени, изменить Джек на Джейсона, жениться на Ларри. Затем сохранить лист Excel, а затем импортировать его в программное обеспечение, чтобы все изменения, сделанные пользователями, также изменяются в базе данных.

Я реализовал большую часть этой функциональности, но столкнулся с проблемами при последнем пакетном обновлении. Я преобразовал импортированный Excel в таблицу с той же структурой в качестве таблицы базы данных, а затем реализовал ее с помощью adapt.update (dt). Однако я обнаружил, что он не обновляет пользовательские изменения в Excel в базе данных, а непосредственно вставляет информацию об импортированном Excel в базу данных, что также приводит к дублированию информации в базе данных. Код реализации для адаптера. Update () показано ниже. Где dt - таблица, преобразованная импортированным Excel.

public static bool BatchUpdate("select * from MYDATABASE",DataTable dt,ref string error)
{
    if (dt.GetChanges().Rows.Count == 0) return true;
    SQLiteConnection conn = SQLiteHelper.GetConnection();
    conn.Open();
    SQLiteTransaction t = conn.BeginTransaction();
    using (SQLiteCommand selectcommand = new SQLiteCommand(selectSql, conn, t))
    {
        using (SQLiteDataAdapter adapter = new SQLiteDataAdapter())
        {
            adapter.SelectCommand = selectcommand;
            SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);                   
            adapter.Update(dt);
            dt1.AcceptChanges();          
        }
        t.Commit();
        return true;
    }
}

Спасибо всем. Я ценю каждое предложение.

1 Ответ

0 голосов
/ 18 января 2020

Каждая строка данных имеет четыре возможных состояния:

  • Без изменений

  • Новое

  • Удалено

  • Изменено

Когда вы вставляете строки, полученные из листа Excel, в пустой DataTable, все строки будут иметь состояние New и, следовательно, будет вставлен в базу данных.

У вас есть следующие опции:

  • Выберите данные из базы данных в DataTable, затем обновите вставку или удалите из DataTable в соответствии с тем, что вы читаете из листа Excel, затем вызовите функцию BatchUpdate.

  • Выполните оператор обновления для всех строк, которые есть в листе Excel. Для тех строк, число затрагиваемых строк равно нулю, введите оператор вставки. Наконец, выберите все первичные ключи из базы данных и удалите все те, которые отсутствуют в вашем листе Excel.

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