예제 #1
0
        private void UpdateDataToDB()
        {
            // создание соединения с БД
            SQLiteConnection connection = new SQLiteConnection(_connection);
            // команда для фиксации факта изменения записи
            SQLiteCommand fixdata =
                new SQLiteCommand(FixData.GetReplaceText(PersonInfo.tablename, FixData.FixType.Edit, _personID,
                                                         _operName, DateTime.Now));
            // создание команд для обновления
            SQLiteCommand updatePerson = PersonInfo.CreateUpdateCommand();
            // инициализация комманды для Адресса прописки
            SQLiteCommand commandRegadr = _regadrID == -1 ? Adress.CreateInsertCommand() : Adress.CreateUpdateCommand();

            // инициализация комманды для Адресса проживания
            SQLiteCommand commandFactadr = null;

            if (adressrealCheckBox.Checked)
            {
                commandFactadr = _factadrID == -1 ? Adress.CreateInsertCommand() : Adress.CreateUpdateCommand();
            }

            // инициализация комманды для Места рождения
            SQLiteCommand commandBornadr = _bornadrID == -1
                ? Adress.CreateInsertCommand()
                : Adress.CreateUpdateCommand();

            // инициализация комманды для документа
            SQLiteCommand commandIDoc = _idocID == -1 ? IDocInfo.CreateInsertCommand() : IDocInfo.CreateUpdateCommand();

            // присвоение подключения командам
            updatePerson.Connection  = connection;
            commandRegadr.Connection = connection;
            if (commandFactadr != null)
            {
                commandFactadr.Connection = connection;
            }
            commandBornadr.Connection = connection;
            commandIDoc.Connection    = connection;
            fixdata.Connection        = connection;
            // заполнение команд параметрами
            SetRegAdressValues(commandRegadr);
            if (commandFactadr != null)
            {
                SetFactAdressValues(commandFactadr);
            }
            SetBornplaceValues(commandBornadr);
            SetDocValues(commandIDoc);

            // открытие соединения
            connection.Open();
            // создание транзакции
            SQLiteTransaction transaction = connection.BeginTransaction();

            // присвоение транзакции командам
            fixdata.Transaction                      =
                commandRegadr.Transaction            =
                    commandBornadr.Transaction       =
                        commandIDoc.Transaction      =
                            updatePerson.Transaction = transaction;
            if (commandFactadr != null)
            {
                commandFactadr.Transaction = transaction;
            }

            // выполнение запросов для вставки данных в смежные таблицы
            if (_regadrID == -1)
            {
                // вставка прописки и получение ID записи
                _regadrID = (long)commandRegadr.ExecuteScalar();
            }
            else
            {
                // обновление записи
                commandRegadr.ExecuteNonQuery();
            }

            // если фактический адресс проживания отличается от прописки
            if (commandFactadr != null && adressrealCheckBox.Checked)
            {
                if (_factadrID == -1)
                {
                    // вставка адресса проживания и получение ID записи
                    _factadrID = (long)commandFactadr.ExecuteScalar();
                }
                else
                {
                    // обновление записи
                    commandFactadr.ExecuteNonQuery();
                }
            }
            else // если адресс прописки совпадает с адрессом фактического проживания
            {
                _factadrID = _regadrID;
            }

            if (_bornadrID == -1)
            {
                // вставка места рождения и получение ID записи
                _bornadrID = (long)commandBornadr.ExecuteScalar();
            }
            else
            {
                // обновление записи
                commandBornadr.ExecuteNonQuery();
            }

            if (_idocID == -1)
            {
                // вставка документа и получение ID записи
                _idocID = (long)commandIDoc.ExecuteScalar();
            }
            else
            {
                commandIDoc.ExecuteNonQuery();
            }

            // заполнение команды вставки Персоны параметрами,
            // в том числе определенными ID ранее вставленных записей адрессов и документа
            SetPersonValues(updatePerson);
            // исполнение команды обновления Персоны
            updatePerson.ExecuteNonQuery();
            fixdata.ExecuteNonQuery();
            // подтаверждение транзакции
            transaction.Commit();
            // закрытие соединения
            connection.Close();
        }