private Query(Mode mode, ICashDataWriter writer, IEventLink eventLink, QueryMapper mapper) { _mode = mode; _writer = writer; _eventLink = eventLink; _mapper = mapper; }
private void ExecuteQuery(String datasetName, ICashDataWriter writer, Action<FbReader> setParamsAction) { // ищем параметры мэппинга для запроса var mapper = _mappers.FirstOrDefault( m => String.Compare(m.DatasetName, datasetName) == 0); if (mapper == null) { _eventLink.Post(ConstHelper.EventSource, EventType.Warning, String.Format(_unmappedTable, datasetName)); return; } // выполняем запрос Query.Execute(_mode, writer, _eventLink, mapper, setParamsAction); }
/// <summary> /// Сохранение данных таблицы /// </summary> /// <param name="writer">Поток записи в файл</param> /// <param name="fbConnection">Соединение с базой данных</param> /// <param name="fbTransaction">Открытая транзакция</param> /// <param name="tableName">Имя таблицы</param> private void CopyTable(ICashDataWriter writer, FbConnection fbConnection, FbTransaction fbTransaction, string tableName) { writer.AppendTable(tableName); using (FbCommand selectCommand = new FbCommand("select * from " + tableName, fbConnection, fbTransaction)) using (FbDataReader dataReader = selectCommand.ExecuteReader()) { while (dataReader.Read()) { writer.AppendRecord(); for (int i = 0; i < dataReader.FieldCount; i++) { string fieldValue = string.Empty; if (!dataReader.IsDBNull(i)) { switch (Type.GetTypeCode(dataReader.GetFieldType(i))) { case TypeCode.DateTime: writer.AppendField(dataReader.GetName(i), dataReader.GetDateTime(i)); break; case TypeCode.Decimal: writer.AppendField(dataReader.GetName(i), dataReader.GetDecimal(i)); break; case TypeCode.Double: writer.AppendField(dataReader.GetName(i), dataReader.GetDecimal(i)); break; default: writer.AppendField(dataReader.GetName(i), dataReader.GetString(i).Trim()); break; } } } } } }
public static void Execute(Mode mode, ICashDataWriter writer, IEventLink eventLink, QueryMapper mapper, Action<FbReader> setParamsAction) { var query = new Query(mode, writer, eventLink, mapper); query.Execute(setParamsAction); }
/// <summary> /// Сохранение значений генераторов /// </summary> /// <param name="writer">Поток записи в файл</param> /// <param name="fbConnection">Соединение с базой данных</param> /// <param name="fbTransaction">Открытая транзакция</param> private void CopyGenerators(ICashDataWriter writer, FbConnection fbConnection, FbTransaction fbTransaction) { writer.AppendTable("Generators"); writer.AppendRecord(); using (FbCommand selectCommand = new FbCommand("select RDB$GENERATOR_NAME from RDB$GENERATORS", fbConnection, fbTransaction)) using (FbDataReader dataReader = selectCommand.ExecuteReader()) { while (dataReader.Read()) { if (dataReader.GetString(0).StartsWith("RDB$") || dataReader.GetString(0).StartsWith("SQL$")) continue; using (FbCommand genCommand = new FbCommand("select GEN_ID(" + dataReader.GetString(0).Trim() + ", 0) from RDB$DATABASE", fbConnection, fbTransaction)) { writer.AppendField(dataReader.GetString(0).Trim(), genCommand.ExecuteScalar().ToString()); } } } }