/// <summary> /// Получить список кодов валют /// </summary> /// <returns></returns> public List <CurrencyFromDate> GetEnumCurrencies() { try { List <CurrencyFromDate> result = new List <CurrencyFromDate>(); List <string> vName = new List <string>(); List <string> vCode = new List <string>(); DailyInfoSoapClient RatesCBR_Data = new DailyInfoSoapClient(); XmlNode data = RatesCBR_Data.EnumValutesXML(false); //получаем данные с веб-сервиса http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx foreach (XmlNode valute in data) { result.Add(new CurrencyFromDate() { CurrencyName = valute["Vname"].InnerText.TrimEnd(), CurrencyCode = valute["Vcode"].InnerText.TrimEnd(), }); } return(result); } catch (Exception e) { string MethodName = MethodBase.GetCurrentMethod().ToString(); WriteLog(e.Message, MethodName); return(null); } }
/// <summary> /// Заполнение gridCurrency курсами валют /// </summary> /// <returns></returns> private DataTable GetExcahngeRate() { try { var client = new DailyInfoSoapClient(); DataSet response = client.GetCursOnDate(dtCource.DateTime); // Загрузка данных из сервиса ЦБ на дату DataTable rateTable = response.Tables["ValuteCursOnDate"]; // Таблица с данными из сервиса ЦБ rateTable.Select().ToList <DataRow>() .ForEach(r => { r["Vname"] = r["Vname"].ToString().Trim(); }); // Убираем пробелы в конце строки gridCurrency.DataSource = rateTable; // Источник данных грида // Наименования колонок gridViewCurrency.Columns["Vname"].Caption = "Наименование валюты"; gridViewCurrency.Columns["Vnom"].Caption = "Номинал"; gridViewCurrency.Columns["Vcurs"].Caption = "Курс"; gridViewCurrency.Columns["Vcode"].Caption = "ISO Цифровой код валюты"; gridViewCurrency.Columns["VchCode"].Caption = "ISO Символьный код валюты"; gridViewCurrency.BestFitColumns(); // Автоширина колонок по макс.длинне значения } catch (Exception ex) { MessageBox.Show("Ошибка получения курсов валют. " + ex.Message); } return(null); }
/// <summary> /// Получить курс валют на сегодняшний день /// </summary> /// <returns></returns> public List <Currency> GetCursOnDate() { try { List <Currency> result = new List <Currency>(); DailyInfoSoapClient RatesCBR_Data = new DailyInfoSoapClient(); XmlNode data = RatesCBR_Data.GetCursOnDateXML(DateTime.Now); //получаем данные с веб-сервиса http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx foreach (XmlNode valute in data) { result.Add(new Currency() //заполняем список данными из запроса { CurrencyName = valute["Vname"].InnerText, CurrencyStringCode = valute["VchCode"].InnerText, Nominal = Convert.ToInt32(valute["Vnom"].InnerText), ExchangeRate = valute["Vcurs"].InnerText, }); } return(result); } catch (Exception e) { string MethodName = MethodBase.GetCurrentMethod().ToString(); WriteLog(e.Message, MethodName); return(null); } }
/// <summary> /// Получить динамику выбранной валюты по дате /// </summary> /// <param name="startDate"></param> /// <param name="endTime"></param> /// <param name="currencyCode"></param> /// <returns></returns> public List <DynamicCurrency> GetCursDynamic(DateTime startDate, DateTime endDate, string currencyCode) { try { List <DynamicCurrency> result = new List <DynamicCurrency>(); DailyInfoSoapClient RatesCBR_Data = new DailyInfoSoapClient(); XmlNode data = RatesCBR_Data.GetCursDynamicXML(startDate, endDate, currencyCode); //получаем данные с веб-сервиса http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx foreach (XmlNode valute in data) { result.Add(new DynamicCurrency() { RatesDate = Convert.ToDateTime(valute["CursDate"].InnerText), Nominal = Convert.ToInt32(valute["Vnom"].InnerText), ExchangeRate = valute["Vcurs"].InnerText, }); } return(result); } catch (Exception e) { string MethodName = MethodBase.GetCurrentMethod().ToString(); WriteLog(e.Message, MethodName); return(null); } }
public Task <IBankResult> GetRateAsync(string currency, DateTime date) { IBankResult bankResult = new BankResult() { ExchangeRate = -1m, RateDate = date, HomeCurrency = homeCurrency, BankName = bankName }; BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress endPointAddress = new EndpointAddress("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx"); DailyInfoSoap client = new DailyInfoSoapClient(binding, endPointAddress); Task <DataSet> fxRates = client.GetCursOnDateAsync(date); fxRates.Wait(); DataTable table = fxRates.Result.Tables["ValuteCursOnDate"]; string filterExpression = $"VchCode = '{currency}'"; DataRow[] rows = table.Select(filterExpression); decimal.TryParse(rows[0]["Vnom"].ToString(), out decimal multiplier); decimal.TryParse(rows[0]["Vcurs"].ToString(), out decimal rate); decimal fxRate = rate / multiplier; bankResult.ExchangeRate = fxRate; return(Task.FromResult(bankResult)); }
private static DailyInfoSoapClient CreateDailyInfoSoapClient() { var soapClient = new DailyInfoSoapClient( endpointConfiguration: DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap ); return(soapClient); }
private DailyInfoSoapClient CreateDailyInfoSoapClient() { var binding = new BasicHttpBinding { MaxReceivedMessageSize = 104857600 }; var endpoint = new EndpointAddress(new Uri(_serviceOptions.Value.Url)); var cartServiceClient = new DailyInfoSoapClient(binding, endpoint); return(cartServiceClient); }
public async Task <XmlDocument> DownloadKeyRate(DateTime date) { _logger.Info($"Загрузка ключевой ставки"); var client = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); var temp = await client.KeyRateXMLAsync(date, date); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml($"<KeyRate><ValidDate>{date.ToString("yyyy-MM-dd")}</ValidDate>{temp.InnerXml}</KeyRate>"); return(xmlDocument); }
public async Task <XmlDocument> DownloadForeignExchange(DateTime date) { _logger.Info($"Загрузка иносстранных валют"); var client = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); var temp = await client.GetCursOnDateXMLAsync(date); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml($"<Currencies><ValidDate>{date.ToString("yyyy-MM-dd")}</ValidDate>{temp.InnerXml}</Currencies>"); return(xmlDocument); }
public async Task <XmlDocument> DownloadRuonia(DateTime date) { _logger.Info($"Загрузка руони"); var client = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); var temp = await client.RuoniaXMLAsync(date, date); var xmlDocument = new XmlDocument(); xmlDocument.LoadXml($"<Ruonia><ValidDate>{date.ToString("yyyy-MM-dd")}</ValidDate>{temp.InnerXml}</Ruonia>"); return(xmlDocument); }
public DCURSES GetDynamicCurs(DateTime startDate, DateTime endDate, string code) { string tabl = string.Empty; DailyInfoSoapClient clientCurs = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); Task <XElement> t = clientCurs.GetCursDynamicXMLAsync(startDate, endDate, code); XElement elemDCurs = t.Result; Console.WriteLine("elemDCurs - " + elemDCurs.ToString()); XmlSerializer xmlSerializer = new XmlSerializer(typeof(DCURSES)); DCURSES curCurs = (DCURSES)xmlSerializer.Deserialize(elemDCurs.CreateReader()); Console.WriteLine("DDDcurCurs.Count - " + curCurs.Count); return(curCurs); }
public Task <IBankResult> GetRateAsync(string currency, DateTime date) { IBankResult bankResult = new BankResult() { ExchangeRate = -1m, RateDate = date, HomeCurrency = homeCurrency, BankName = bankName }; DailyInfoSoap client = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); Task <ArrayOfXElement> fxRates = client.GetCursOnDateAsync(date); List <XElement> Results = fxRates.Result.Nodes; foreach (XElement result in Results) { if (result.Name.LocalName == "diffgram") { XElement ValuteData = result.Element("ValuteData"); IEnumerable <XElement> ValueOnDate = ValuteData.Elements(); foreach (XElement ValuteCursOnDate in ValueOnDate) { IEnumerable <XElement> Properties = ValuteCursOnDate.Elements(); string Currency = ValuteCursOnDate.Element("VchCode").Value; decimal FxRate = decimal.Zero; decimal.TryParse(ValuteCursOnDate.Element("Vcurs").Value, out FxRate); decimal multiplier = decimal.Zero; decimal.TryParse(ValuteCursOnDate.Element("Vnom").Value, out multiplier); if (Currency == currency) { FxRate /= multiplier; bankResult.ExchangeRate = FxRate; return(Task.FromResult(bankResult)); } } } } return(Task.FromResult(bankResult)); }
public async Task <IBankResult> GetRateAsync(string currency, DateTime date) { if (!SupportedCurrencies.ContainsKey(currency)) { throw new NotImplementedException($"{bankName} does not support {currency}"); } IBankResult bankResult = new BankResult() { ExchangeRate = -1m, RateDate = date, HomeCurrency = homeCurrency, BankName = bankName }; BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress endPointAddress = new EndpointAddress("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx"); DailyInfoSoap client = new DailyInfoSoapClient(binding, endPointAddress); //ArrayOfXElement fxRates = await client.GetCursOnDateAsync(date); Task <DataSet> fxRates = client.GetCursOnDateAsync(date); fxRates.Wait(); //var list = fxRates.Nodes.Find(n => n.Name.LocalName == "diffgram"); DataTable table = fxRates.Result.Tables["ValuteCursOnDate"]; string filterExpression = $"VchCode = '{currency}'"; if (table == null || table?.Rows.Count == 0) { return(bankResult); } DataRow[] rows = table.Select(filterExpression); decimal.TryParse(rows[0]["Vnom"].ToString(), out decimal multiplier); decimal.TryParse(rows[0]["Vcurs"].ToString(), out decimal rate); decimal fxRate = rate / multiplier; bankResult.ExchangeRate = fxRate; return(bankResult); }
public CURSES GetCursOnDate() { string tabl = string.Empty; DailyInfoSoapClient clientCurs = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); Task <XElement> t = clientCurs.GetCursOnDateXMLAsync(DateTime.Now); XElement elemCurs = t.Result; Console.WriteLine("elemCurs - " + elemCurs.ToString()); XmlSerializer xmlSerializer = new XmlSerializer(typeof(CURSES)); CURSES curCurs = (CURSES)xmlSerializer.Deserialize(elemCurs.CreateReader()); Console.WriteLine("curCurs.Count - " + curCurs.Count); if (curCurs.Count == 0) { tabl = "Нет данных"; } Console.WriteLine("result - " + tabl); return(curCurs); }
public VALUTES GetValutes() { try { DailyInfoSoapClient clientValuta = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); Task <XElement> t = clientValuta.EnumValutesXMLAsync(false); XElement elem = t.Result; this.element = elem; Console.WriteLine("elem - " + elem.ToString()); XmlSerializer xmlSerializer = new XmlSerializer(typeof(VALUTES)); VALUTES vals = (VALUTES)xmlSerializer.Deserialize(elem.CreateReader()); return(vals); } catch (Exception e) { Console.WriteLine("!!!!!!" + e.ToString()); return(null); } }
public async Task <IBankResult> GetRateAsync(string currency, DateTime date) { if (!SupportedCurrencies.ContainsKey(currency)) { throw new NotImplementedException($"{bankName} does not support {currency}"); } if (date < minDate) { throw new ArgumentOutOfRangeException("date", $"Date must be greater than {minDate:dd-MMM-yyyy}"); } BasicHttpBinding binding = new BasicHttpBinding(); EndpointAddress endPointAddress = new EndpointAddress("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx"); DailyInfoSoap client = new DailyInfoSoapClient(binding, endPointAddress); ArrayOfXElement fxRates = await client.GetCursOnDateAsync(date); var valuesNode = fxRates.Nodes .Where(n => n.Name.LocalName == "diffgram").FirstOrDefault().Elements() .Where(e => e.Name == "ValuteData").Elements("ValuteCursOnDate") .Where(ee => ee.Elements("VchCode").FirstOrDefault().Value.Trim() == currency).FirstOrDefault(); if (!valuesNode.IsEmpty) { string Vnom = valuesNode.Elements("Vnom").FirstOrDefault().Value.Trim(); string Vcurs = valuesNode.Elements("Vcurs").FirstOrDefault().Value.Trim(); string VchCode = valuesNode.Elements("VchCode").FirstOrDefault().Value.Trim(); decimal.TryParse(Vnom, out decimal multiplier); decimal.TryParse(Vcurs, out decimal rate); decimal resultFxRate = rate / (multiplier == 0 ? 1: multiplier); bankResult.RateDate = date; bankResult.ExchangeRate = resultFxRate; } return(bankResult); }
/// <summary> /// ѕеречисление валют. /// </summary> /// <remarks> /// ћетод здесь не используетс¤. /// —оздан просто чтобы получить список кодов валют. /// ѕри использовании в try catch обернуть только не забыть надо. /// ј то может и ответ не прийти и поле помен¤ть формат. Ќу вдруг. /// </remarks> public async Task <Object[]> EnumValutesAsync() { using DailyInfoSoapClient soapClient = CreateDailyInfoSoapClient(); // Seld Ч формат -boolean // False Ч перечень ежедневных валют // True Ч перечень ежемес¤чных валют ArrayOfXElement arrayOfXElement = await soapClient.EnumValutesAsync(false); Object[] result = InterpretTables(arrayOfXElement: arrayOfXElement , selector: dataRow => new { Vcode = dataRow.Field <String>("Vcode").Trim(), // Ч ¬нутренний код валюты* Vname = dataRow.Field <String>("Vname").Trim(), // Ч Ќазвание валюты VEngname = dataRow.Field <String>("VEngname").Trim(), // Ч јнгл. название валюты Vnom = dataRow.Field <String>("Vnom").Trim(), // Ч Ќоминал VcommonCode = dataRow.Field <String>("VcommonCode").Trim(), // Ч ¬нутренний код валюты, ¤вл¤ющейс¤ ТбазовойТ** VnumCode = dataRow.Field <String>("VnumCode").Trim(), // Ч цифровой код ISO VcharCode = dataRow.Field <String>("VcharCode").Trim(), // Ч 3х буквенный код ISO } as Object ); return(result); }
/// <summary> /// урс. /// </summary> /// <remarks> /// ѕо идее тут могут выскочить ошибки, например преобразовани¤ пришедшего ответа или что ещЄ. /// Ќо всЄ не предусмотришь. /// Ќа это есть обработчик, настроенный в Startup-е. /// </remarks> public async Task <ValuteCursOnDate[]> GetCursOnDateAsync(DateTime date) { // Ќа вс¤кий, вдруг с временем передали. ј мне только дату хочетс¤. // Ёто не лишнее т.к. ¤ не нашЄл в документации, // что можно передавать с временем и от него нет зависимости. date = date.Date; using DailyInfoSoapClient soapClient = CreateDailyInfoSoapClient(); ArrayOfXElement arrayOfXElement = await soapClient.GetCursOnDateAsync(date); ValuteCursOnDate[] result = InterpretTables(arrayOfXElement: arrayOfXElement , selector: dataRow => new ValuteCursOnDate { Vname = dataRow.Field <String>("Vname").Trim(), Vnom = dataRow.Field <Decimal>("Vnom"), Vcurs = dataRow.Field <Decimal>("Vcurs"), Vcode = dataRow.Field <Int32>("Vcode"), VchCode = dataRow.Field <String>("VchCode").Trim(), } ); return(result); }
protected SoapServiceBase(DailyInfoSoapClient soapClient) { SoapClient = soapClient ?? throw new ArgumentNullException(nameof(soapClient)); }
protected SoapServiceBase() { SoapClient = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap); }
public CurrencyService(DailyInfoSoapClient soapClient) : base(soapClient) { }
public DailyInfoSoapClient(EndpointConfiguration endpointConfiguration) : base(DailyInfoSoapClient.GetBindingForEndpoint(endpointConfiguration), DailyInfoSoapClient.GetEndpointAddress(endpointConfiguration)) { this.Endpoint.Name = endpointConfiguration.ToString(); ConfigureEndpoint(this.Endpoint, this.ClientCredentials); }
static void Main(string[] args) { bool hasException = false; CbrServices.DailyInfoSoapClient client = new DailyInfoSoapClient(); string generalPath = @"C:\Users\bushuevroman\YandexDisk\MarketData\CBR\raw\ruonia\ruonia.csv"; DateTime from = new DateTime(2010, 01, 10).Date; DateTime to = DateTime.Today.Date; try { var result = client.Ruonia(from, to); List <string> strings = new List <string>() { "Date\tvalue\tnominal\t" }; foreach (DataTable dataTable in result.Tables) { foreach (DataRow row in dataTable.Rows) { StringBuilder text = new StringBuilder(); foreach (DataColumn column in dataTable.Columns) { if (row[column].GetType() == typeof(DateTime)) { //Добавление одной даты, т.к. у нас результат отличается благодаря DateTime date = ((DateTime)row[column]).AddDays(1); string tempResult = string.Format("{0}.{1}.{2}", date.Day, date.Month, date.Year); text.Append(tempResult + "\t"); } else { text.Append(row[column].ToString() + "\t"); } } strings.Add(text.ToString()); } } System.IO.File.WriteAllLines(generalPath, strings); } catch (Exception ex) { hasException = true; Console.WriteLine(ex.Message); bool isWriteException = false; while (!isWriteException) { try { string path = @"C:\Users\bushuevroman\YandexDisk\MarketData\logs.txt"; string pathError = @"C:\Users\bushuevroman\YandexDisk\MarketData\RuoniaExceptionLogs.txt"; using (FileStream fileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read)) { string dataasstring = "Ruonia exception" + "\n"; byte[] info = new UTF8Encoding(true).GetBytes(dataasstring); fileStream.Write(info, 0, info.Length); isWriteException = true; string input = string.Format("{0}->{1}", DateTime.Today.ToShortDateString(), ex.Message); File.AppendAllLines(pathError, new List <string>() { input }); } } catch { } finally { Thread.Sleep(1000); } } } finally { client.Close(); } if (hasException) { return; } bool isWrite = false; while (!isWrite) { try { string path = @"C:\Users\bushuevroman\YandexDisk\MarketData\queue.txt"; using (FileStream fileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read)) { string dataasstring = "Ruonia" + "\n"; byte[] info = new UTF8Encoding(true).GetBytes(dataasstring); fileStream.Write(info, 0, info.Length); isWrite = true; } } catch (Exception ex) { } finally { Thread.Sleep(1000); } } }
public CentralBankSoapCurrencyProvider(string currencyServiceRemoteAddress) { this.dailyInfo = new DailyInfoSoapClient(DailyInfoSoapClient.EndpointConfiguration.DailyInfoSoap12, currencyServiceRemoteAddress); }
static void Main(string[] args) { bool hasException = false; CbrServices.DailyInfoSoapClient client = new DailyInfoSoapClient(); try { string generalPath = @"C:\Users\bushuevroman\YandexDisk\MarketData\CBR\raw\currencies\"; DateTime from = DateTime.Now; StringBuilder text = new StringBuilder(); var result = client.GetCursOnDate(from); foreach (DataTable dataTable in result.Tables) { foreach (DataColumn column in dataTable.Columns) { text.Append(column.ColumnName + "\t"); } text.Append("\n"); foreach (DataRow row in dataTable.Rows) { foreach (DataColumn column in dataTable.Columns) { text.Append(row[column].ToString() + "\t"); } text.Append("\n"); } } string dateTimeText = from.Year.ToString() + "." + from.Month.ToString("00") + "." + from.Day.ToString("00"); System.IO.File.WriteAllText(generalPath + dateTimeText + ".csv", text.ToString()); from = from.AddDays(1); } catch (Exception ex) { hasException = true; Console.WriteLine(ex.Message); bool isWriteException = false; while (!isWriteException) { try { string path = @"C:\Users\bushuevroman\YandexDisk\MarketData\logs.txt"; string pathError = @"C:\Users\bushuevroman\YandexDisk\MarketData\CurrencyExceptionLogs.txt"; using (FileStream fileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read)) { string dataasstring = "Currencies exception" + "\n" + DateTime.Now.ToShortDateString(); byte[] info = new UTF8Encoding(true).GetBytes(dataasstring); fileStream.Write(info, 0, info.Length); isWriteException = true; string input = string.Format("{2}->{0}->{1}", DateTime.Today.ToShortDateString(), ex.Message, "Currencies exception"); File.AppendAllLines(pathError, new List <string>() { input }); } } catch { } finally { Thread.Sleep(1000); } } } finally { client.Close(); } if (hasException) { return; } bool isWrite = false; while (!isWrite) { try { string path = @"C:\Users\bushuevroman\YandexDisk\MarketData\queue.txt"; using (FileStream fileStream = new FileStream(path, FileMode.Append, FileAccess.Write, FileShare.Read)) { DateTime date = DateTime.Today; string shortFormat = date.ToString("yyyy.MM.dd"); string dataasstring = "Currencies" + " " + shortFormat + "\n"; byte[] info = new UTF8Encoding(true).GetBytes(dataasstring); fileStream.Write(info, 0, info.Length); isWrite = true; } } catch (Exception ex) { } finally { Thread.Sleep(1000); } } }
public DailyInfoSoapClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : base(DailyInfoSoapClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) { this.Endpoint.Name = endpointConfiguration.ToString(); ConfigureEndpoint(this.Endpoint, this.ClientCredentials); }
private void button1_Click(object sender, EventArgs e) { try { string html; string url = "http://www.cbr.ru/scripts/XML_daily.asp"; WebClient web = new WebClient(); web.Encoding = Encoding.GetEncoding(1251); Stream data = web.OpenRead(url); StreamReader reader = new StreamReader(data, Encoding.GetEncoding(1251)); html = reader.ReadLine(); data.Close(); reader.Close(); FileStream file = new FileStream("data.xaml", FileMode.Create, FileAccess.ReadWrite); StreamWriter wData = new StreamWriter(file); wData.Write(html); wData.Close(); ServiceReference1.DailyInfoSoapClient scr = new DailyInfoSoapClient(); DataSet ds = scr.GetCursOnDate(DateTime.Now.Date); rsl.SendList = null; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { if (rsl.SendList != null) { rsl.SendList.Add(new SendModel() { ID = i + 1, Name = ds.Tables[0].Rows[i].ItemArray[0].ToString(), Date = DateTime.Now.Date, Nominal = ds.Tables[0].Rows[i].ItemArray[1].ToString(), Value = ds.Tables[0].Rows[i].ItemArray[2].ToString(), NumCode = ds.Tables[0].Rows[i].ItemArray[3].ToString(), CharCode = ds.Tables[0].Rows[i].ItemArray[4].ToString() }); } else { rsl.SendList = new List <SendModel>(); rsl.SendList.Add(new SendModel() { ID = i + 1, Name = ds.Tables[0].Rows[i].ItemArray[0].ToString(), Date = DateTime.Now.Date, Nominal = ds.Tables[0].Rows[i].ItemArray[1].ToString(), Value = ds.Tables[0].Rows[i].ItemArray[2].ToString(), NumCode = ds.Tables[0].Rows[i].ItemArray[3].ToString(), CharCode = ds.Tables[0].Rows[i].ItemArray[4].ToString() }); } } dataGridView1.DataSource = rsl.SendList; LoggerProc.logger.Info("Загрузка валют с сервиса завершена. Загружено " + rsl.SendList.Count + " объектов"); AddLogToHistory("Загрузка валют с сервиса завершена. Загружено " + rsl.SendList.Count + " объектов", false); } catch (Exception f) { MessageBox.Show("Данные не получены"); LoggerProc.logger.Error("Загрузка валютных данных с сервиса ОСТАНОВЛЕНА. " + f); AddLogToHistory("Загрузка валютных данных с сервиса ОСТАНОВЛЕНА. " + f, true); } }