Advertisement
Adik28

Kursy walut

Mar 26th, 2017
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.02 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.IO;
  6. using System.Xml;
  7. using Dapper;
  8. using FirebirdSql.Data.FirebirdClient;
  9. using kursywalut.Models;
  10. using System.Configuration;
  11.  
  12.  
  13. namespace kursywalut
  14. {
  15.     class Program
  16.     {
  17.         static void Main(string[] args)
  18.         {
  19.             DisplayCurrencyCodesFromDatabase();
  20.             //DisplayCurrencyNBPCourse(currencyListNBP);
  21.             MatchingCurrencyCodesXMLAndDB();
  22.         }
  23.  
  24.         #region MatchingCurrencyCodesXMLAndDB
  25.         /// <summary>
  26.         /// metoda sprawdzająca, które kody z bazy danych pokrywają się z kodami z xmla NBP i wypisująca dane o walutach,
  27.         /// których kody się powtarzają
  28.         /// </summary>
  29.         public static void MatchingCurrencyCodesXMLAndDB()
  30.         {
  31.  
  32.             const string url = @"http://www.nbp.pl/kursy/xml/LastA.xml";
  33.             var currencyListNBP = ImportData(url);
  34.             var currencyCodesListFromDatabase = DisplayCurrencyCodesFromDatabase();
  35.             try
  36.             {
  37.                 var ConnectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
  38.                 using (var conn = new FbConnection(ConnectionString))
  39.                 {
  40.  
  41.                     //sprawdzanie czy kody z bazy występują w xmlu z nbp
  42.                     for (var i = 0; i < currencyCodesListFromDatabase.Count; i++)
  43.                     {
  44.                         var currencyCodeFromDatabase = currencyCodesListFromDatabase[i];
  45.  
  46.                         foreach (var item2 in currencyListNBP)
  47.                         {
  48.                             //jeśli kod jest i w liście kodów z bazy i w xmlu
  49.                             if (currencyCodeFromDatabase != item2.CurrencyCode) continue;
  50.                             //sprawdzanie czy data się nie powtarza
  51.                             var sql = string.Format("SELECT DISTINCT WALUTA_ID FROM WALUTA WHERE WALUTA_KOD='{0}' ROWS 1", currencyCodeFromDatabase);
  52.                             var currencyId = conn.Query<int>(sql).First();
  53.  
  54.                             sql = string.Format("SELECT DISTINCT KURS_Z_DNIA FROM SLO_KURSY_WALUTY WHERE WALUTA_ID={0} ORDER by slo_kursy_waluty_id  DESC ", currencyId);
  55.                             var lastDateFromDB = conn.Query<DateTime>(sql).First();
  56.  
  57.                             Console.WriteLine();
  58.                             Console.WriteLine("Nazwa waluty: " + item2.CurrencyName + "\n" + "Kod waluty: " + item2.CurrencyCode + "\n" + "Kurs waluty: "
  59.                                               + item2.CurrencyRate + "\n" + "Przelicznik: " + item2.Converter + "\n" + "Data: " + item2.CurrencyDate + " ");
  60.  
  61.  
  62.                             if (lastDateFromDB != item2.CurrencyDate)
  63.                             {
  64.                                 Console.WriteLine("Dodano nowy kurs waluty do bazy danych!");
  65.                                 conn.Execute("INSERT INTO SLO_KURSY_WALUTY(KURS_Z_DNIA,KURS,DATA_OD,DATA_DO,WALUTA_ID,TYP_TABELI,KURS2,NUMER_TABELI) VALUES(@KURS_Z_DNIA,@KURS,@DATA_OD,@DATA_DO,@WALUTA_ID,0,@KURS2,@NUMER_TABELI) ",
  66.                                     new { KURS_Z_DNIA = item2.CurrencyDate, KURS = item2.CurrencyRate, DATA_OD = item2.CurrencyDate, DATA_DO = item2.CurrencyDate, WALUTA_ID = currencyId, KURS2 = 1 / item2.CurrencyRate, NUMER_TABELI = item2.CurrencyTableNumber });
  67.                             }
  68.                             else
  69.                             {
  70.                                 Console.WriteLine("W bazie danych znajduje się aktualny kurs waluty!");
  71.                             }
  72.                         }
  73.                     }
  74.                 }
  75.                 Console.ReadKey();
  76.             }
  77.             catch (Exception e)
  78.             {
  79.                 Console.WriteLine(e);
  80.             }
  81.         }
  82.         #endregion
  83.  
  84.         #region DisplayCurrencyCodesFromDatabase
  85.         /// <summary>
  86.         /// metoda do wyświetlania kodów walut z tabeli WALUTA_KOD
  87.         /// </summary>
  88.         public static List<string> DisplayCurrencyCodesFromDatabase()
  89.         {
  90.             var connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
  91.             using (var connection = new FbConnection(connectionString))
  92.             {
  93.                 const string queryCurrencyCodes = "SELECT WALUTA_KOD FROM WALUTA";
  94.                 //lista kodów walut z bazy danych
  95.                 var currencyCodesListDB = connection.Query<string>(queryCurrencyCodes).ToList();
  96.  
  97.                 //usuwanie spacji z kodów walut z bazy danych
  98.                 for (var i = 0; i < currencyCodesListDB.Count; i++)
  99.                 {
  100.                     currencyCodesListDB[i] = currencyCodesListDB[i].Trim();
  101.                 }
  102.                 return currencyCodesListDB;
  103.             }
  104.         }
  105.         #endregion
  106.  
  107.         #region GetCurrencyCourse
  108.         /// <summary>
  109.         /// metoda do pobierania aktualnego kursu walut
  110.         /// </summary>
  111.         private static List<Currency> ImportData(string url)
  112.         {
  113.             //tworzenie połączenia z podanym url
  114.             var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
  115.  
  116.             //wysyła request i czeka na odpowiedź
  117.             var myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
  118.  
  119.             //pobiera stream związany z odpowiedzią
  120.             var receiveStream = myHttpWebResponse.GetResponseStream();
  121.             var encode = System.Text.Encoding.GetEncoding("iso-8859-2");
  122.  
  123.  
  124.             using (var readStream = new StreamReader(receiveStream, encode))
  125.             {
  126.                 var readedData = readStream.ReadToEnd();
  127.                 myHttpWebResponse.Close();
  128.  
  129.                 var xmlDoc = new XmlDocument();
  130.                 xmlDoc.LoadXml(readedData);
  131.  
  132.                 var currencyListXml = xmlDoc.GetElementsByTagName("pozycja");
  133.                 var date = xmlDoc.GetElementsByTagName("data_publikacji");
  134.  
  135.                 //wyciągnięcie numeru tabeli
  136.                 var tableNumber = xmlDoc.SelectSingleNode("tabela_kursow/numer_tabeli/text()");
  137.                 Console.WriteLine(string.Concat("Numer tabeli: ", tableNumber.Value));
  138.  
  139.                 var currencyDate = Convert.ToDateTime(date[0].FirstChild.Value);
  140.  
  141.  
  142.                 return (from XmlNode currencyXml in currencyListXml
  143.                     select new Currency
  144.                     {
  145.                         CurrencyName = currencyXml.SelectSingleNode("nazwa_waluty").FirstChild.Value,
  146.                         Converter = currencyXml.SelectSingleNode("przelicznik").FirstChild.Value,
  147.                         CurrencyCode = currencyXml.SelectSingleNode("kod_waluty").FirstChild.Value,
  148.                         CurrencyRate = Convert.ToDouble(currencyXml.SelectSingleNode("kurs_sredni").FirstChild.Value),
  149.                         CurrencyTableNumber = Convert.ToString(tableNumber.Value), CurrencyDate = currencyDate
  150.                     }).ToList();
  151.             }
  152.         }
  153.         #endregion
  154.     }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement