private void AppendField(IDataReader reader, FbReaderHelper helper, Int32 index) { // ищем параметры отображения поля по имени поля в базе var mapper = _mapper.FieldMappers.FirstOrDefault( m => String.Compare(m.ShortDatabaseName, reader.GetName(index), true) == 0); if (mapper == null) return; // в зависимости от типа поля switch (mapper.FieldType) { case FieldType.Binary: // для записи в выходной набор данных используется последний элемент // в коллекции псевдонимов свойства (т. е. последнее значение всегда // является актуальным, а предыдущие - псевдонимы, оставленные для // обратной совместимости) _writer.AppendField(mapper.DatasetNames.Last(), helper.GetBytes(index)); break; case FieldType.Boolean: _writer.AppendField(mapper.DatasetNames.Last(), helper.GetBoolean(index)); break; case FieldType.DateTime: _writer.AppendField(mapper.DatasetNames.Last(), helper.GetDateTime(index)); break; case FieldType.Decimal: _writer.AppendField(mapper.DatasetNames.Last(), helper.GetDecimal(index)); break; case FieldType.Int32: _writer.AppendField(mapper.DatasetNames.Last(), helper.GetInt32(index)); break; default: _writer.AppendField(mapper.DatasetNames.Last(), helper.GetString(index).TrimEnd((Char)0x20)); break; } }
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(); } }