/// <summary> /// Производит сохранение данных в БД созданной сводной ведомости /// </summary> private void SaveNew() { // создать виртуальную таблицу с пустыми записями _mergeInfoTable = MergeInfo.CreateTableWithRows(); // скопировать данные из транспонированной таблицы в созданную MergeInfoTranspose.ConvertToMergeInfo(_svodTable, _mergeInfoTable); // просчитать суммы в созданной таблицйе MergeInfo.MathSums(_mergeInfoTable); // заполнение данными записи Сводной ведомости SetMergeData(); // создание подключения к БД SQLiteConnection connection = new SQLiteConnection(_connection); // создание команд для вставки данных в БД SQLiteCommand mergeInsert = MergiesView.InsertCommand(_mergeRow); SQLiteCommand tableInsert = MergeInfo.CreateInsertCommand(); SQLiteCommand fixdataReplace = new SQLiteCommand(); SQLiteCommand setUnactual = new SQLiteCommand(MergiesView.GetChangeActualByOrgText(_org.idVal, (int)_mergeRow[MergiesView.repYear], false)); // создание Адаптера для обработки таблицы SQLiteDataAdapter adapter = new SQLiteDataAdapter(); adapter.InsertCommand = tableInsert; // присвоение созданного подключения коммандам mergeInsert.Connection = tableInsert.Connection = fixdataReplace.Connection = setUnactual.Connection = connection; // открытие соединения connection.Open(); // начать транзакция SQLiteTransaction transaction = connection.BeginTransaction(); // прикрепление транзакции mergeInsert.Transaction = tableInsert.Transaction = fixdataReplace.Transaction = setUnactual.Transaction = transaction; // выполнить команду обнуления актуальности сводных ведомостей в выбранном году для текущей организаций setUnactual.ExecuteNonQuery(); // выполнить команду вставки записи о новой сводной ведомости и назначения ее актуальной _mergeRow[MergiesView.id] = mergeInsert.ExecuteScalar(); _mergeRow.EndEdit(); // внести запись о факте создания записи сводной ведомости fixdataReplace.CommandText = MergiesView.GetReplaceFixDataText(_mergeRow, FixData.FixType.New); fixdataReplace.ExecuteNonQuery(); // заполнить соответствующий столбец таблицы ID сводной ведомости для их привязки к ней (сводной ведомости) MergeInfo.SetMergeID(_mergeInfoTable, (long)_mergeRow[MergiesView.id]); // ввыполнить вставку записей из таблицы программы в таблицу БД adapter.Update(_mergeInfoTable); // принять подключение transaction.Commit(); // закрыть соединение connection.Close(); }
/// <summary> /// Производит сохранение данных в БД измененной сводной ведомости /// </summary> private void SaveEdited() { // скопировать данные с транспонированной таблицы в таблицу, соответствующую по структуре с таблицей БД MergeInfoTranspose.ConvertToMergeInfo(_svodTable, _mergeInfoTable); // просчитать суммы в созданной таблицйе MergeInfo.MathSums(_mergeInfoTable); // заполнение данными записи Сводной ведомости SetMergeData(); // создание подключения к БД SQLiteConnection connection = new SQLiteConnection(_connection); // создание команд для вставки данных в БД SQLiteCommand mergeInsert = MergiesView.UpdateCommand(_mergeRow); SQLiteCommand tableInsert = MergeInfo.CreateUpdateCommand(); SQLiteCommand fixdataReplace = new SQLiteCommand(); // создание Адаптера для обработки таблицы SQLiteDataAdapter adapter = new SQLiteDataAdapter(); adapter.UpdateCommand = tableInsert; // присвоение созданного подключения коммандам mergeInsert.Connection = tableInsert.Connection = fixdataReplace.Connection = connection; // открытие соединения connection.Open(); // начать транзакция SQLiteTransaction transaction = connection.BeginTransaction(); // прикрепление транзакции mergeInsert.Transaction = tableInsert.Transaction = fixdataReplace.Transaction = transaction; // выполнить обновление данных о сводной ведомости mergeInsert.ExecuteNonQuery(); // выполнить вставку(обновление) данных о факте изменения сводной ведомости fixdataReplace.CommandText = MergiesView.GetReplaceFixDataText(_mergeRow, FixData.FixType.Edit); fixdataReplace.ExecuteNonQuery(); // выполнить обносление данных по значениям выплат adapter.Update(_mergeInfoTable); // принять подключение transaction.Commit(); // закрыть соединение connection.Close(); }