private void ProcessPrice(String priceListId) { using (var fbExecutor = new FbExecutor()) { fbExecutor.Executor = (connection, transaction) => { // создаем команду для обновления цен using (var updateCommand = connection.CreateCommand()) { updateCommand.Transaction = transaction; updateCommand.CommandText = _sqlInsPrices; // создаем параметры команды updateCommand.AddParameter("@price_category"); updateCommand.AddParameter("@articul"); updateCommand.AddParameter("@series_id"); updateCommand.AddParameter("@price"); updateCommand.AddParameter("@update_mode", (Int32)Mode.Update); updateCommand.Prepare(); // читаем содержимое прайс-листа using (var fbReader = new FbReader()) { fbReader.Text = _sqlGetPriceBody; fbReader.NewParameter("@price_list_id", priceListId); using (var reader = fbReader.ReadMany()) { var readerHelper = new FbReaderHelper(reader); var recordCount = 0; while (reader.Read()) { // устанавливаем значения параметров команды updateCommand.SetParameter("@price_category", readerHelper.GetString(1)); updateCommand.SetParameter("@articul", readerHelper.GetString(2)); updateCommand.SetParameter("@series_id", reader.GetValue(3)); updateCommand.SetParameter("@price", readerHelper.GetDecimal(4)); // выполняем команду updateCommand.ExecuteNonQuery(); recordCount++; } _eventLink.Post(ConstHelper.EventSource, String.Format(_priceProcessed, priceListId, recordCount)); } } } // помечаем прайс, как обработанный MarkPriceAsHandled(connection, transaction, priceListId); }; fbExecutor.Execute(); } }
private void MarkDelayedUpdateAsHandled(Int64 updateId) { using (var dbExecutor = new FbExecutor()) { dbExecutor.Executor = (connection, transaction) => { lock (_writeSync) { using (var command = connection.CreateCommand()) { command.Transaction = transaction; command.CommandText = _sqlMarkAsHandled; dbExecutor.NewParameter(command, "@id", updateId); command.ExecuteNonQuery(); } } }; dbExecutor.Execute(); } _eventLink.Post(ConstHelper.EventSource, String.Format(_delayedUpdateHandled, updateId)); }
private void Mark(Action<FbExecutor, IDbCommand> setParamsAction) { if (_mode == Mode.OperationsLog || _mode == Mode.Current) // в этих режимах нет данных, которые можно пометить как загруженные return; using (var executor = new FbExecutor()) { executor.Executor = (connection, transaction) => { // создаем команду using (var command = connection.CreateCommand()) { command.Transaction = transaction; // формируем ее текст command.CommandText = GetCommandText(); // инициализируем параметры if (setParamsAction != null) setParamsAction(executor, command); lock (_writeSync) { // выполняем команду _eventLink.Post(ConstHelper.EventSource, String.Format(_recordsMarked, command.ExecuteNonQuery())); } } }; executor.Execute(); } }
private void DelayedUpload(ERPService.CashDe.Upload.Mode mode) { _handlerParams.EventLink.Post(ConstHelper.EventSource, _delayedUploadRequest); // дата применения отложенной выгрузки var applyAt = ToDateTime("apply_at"); if (applyAt < DateTime.Now) throw new InvalidOperationException(String.Format(_delayedUploadDateLessThanNow, applyAt)); using (var dbExecutor = new FbExecutor()) { dbExecutor.Executor = (connection, transaction) => { // получаем очередной номер отложенного обновления var updateId = GetDelayedUpdateId(connection, transaction); // формируем имя файла для отложенного обновления var fileName = ERPService.CashDe.Upload.DelayedQueueHelper .GetDelayedUpdateFileName(_handlerParams.WorkingDirectory, updateId); // сохраняем контент запроса в файл SaveContentToFile(fileName); // ставим задание в очередь отложенных обновлений lock (_handlerParams.WriteSync) { using (var command = connection.CreateCommand()) { command.Transaction = transaction; command.CommandText = "INSERT INTO DELAYED_UPDATES VALUES(@ID, @UPDATE_MODE, @APPLY_AT, 0)"; dbExecutor.NewParameter(command, "@ID", updateId); dbExecutor.NewParameter(command, "@UPDATE_MODE", (Int32)mode); dbExecutor.NewParameter(command, "@APPLY_AT", applyAt); command.ExecuteNonQuery(); } } }; dbExecutor.Execute(); } _handlerParams.EventLink.Post(ConstHelper.EventSource, String.Format(_taskQueuedAndDelayed, applyAt)); }