Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.IO;
- using System.Xml;
- using Dapper;
- using FirebirdSql.Data.FirebirdClient;
- using kursywalut.Models;
- using System.Configuration;
- namespace kursywalut
- {
- class Program
- {
- static void Main(string[] args)
- {
- DisplayCurrencyCodesFromDatabase();
- //DisplayCurrencyNBPCourse(currencyListNBP);
- MatchingCurrencyCodesXMLAndDB();
- }
- #region MatchingCurrencyCodesXMLAndDB
- /// <summary>
- /// metoda sprawdzająca, które kody z bazy danych pokrywają się z kodami z xmla NBP i wypisująca dane o walutach,
- /// których kody się powtarzają
- /// </summary>
- public static void MatchingCurrencyCodesXMLAndDB()
- {
- const string url = @"http://www.nbp.pl/kursy/xml/LastA.xml";
- var currencyListNBP = ImportData(url);
- var currencyCodesListFromDatabase = DisplayCurrencyCodesFromDatabase();
- try
- {
- var ConnectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
- using (var conn = new FbConnection(ConnectionString))
- {
- //sprawdzanie czy kody z bazy występują w xmlu z nbp
- for (var i = 0; i < currencyCodesListFromDatabase.Count; i++)
- {
- var currencyCodeFromDatabase = currencyCodesListFromDatabase[i];
- foreach (var item2 in currencyListNBP)
- {
- //jeśli kod jest i w liście kodów z bazy i w xmlu
- if (currencyCodeFromDatabase != item2.CurrencyCode) continue;
- //sprawdzanie czy data się nie powtarza
- var sql = string.Format("SELECT DISTINCT WALUTA_ID FROM WALUTA WHERE WALUTA_KOD='{0}' ROWS 1", currencyCodeFromDatabase);
- var currencyId = conn.Query<int>(sql).First();
- sql = string.Format("SELECT DISTINCT KURS_Z_DNIA FROM SLO_KURSY_WALUTY WHERE WALUTA_ID={0} ORDER by slo_kursy_waluty_id DESC ", currencyId);
- var lastDateFromDB = conn.Query<DateTime>(sql).First();
- Console.WriteLine();
- Console.WriteLine("Nazwa waluty: " + item2.CurrencyName + "\n" + "Kod waluty: " + item2.CurrencyCode + "\n" + "Kurs waluty: "
- + item2.CurrencyRate + "\n" + "Przelicznik: " + item2.Converter + "\n" + "Data: " + item2.CurrencyDate + " ");
- if (lastDateFromDB != item2.CurrencyDate)
- {
- Console.WriteLine("Dodano nowy kurs waluty do bazy danych!");
- 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) ",
- 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 });
- }
- else
- {
- Console.WriteLine("W bazie danych znajduje się aktualny kurs waluty!");
- }
- }
- }
- }
- Console.ReadKey();
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- }
- }
- #endregion
- #region DisplayCurrencyCodesFromDatabase
- /// <summary>
- /// metoda do wyświetlania kodów walut z tabeli WALUTA_KOD
- /// </summary>
- public static List<string> DisplayCurrencyCodesFromDatabase()
- {
- var connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
- using (var connection = new FbConnection(connectionString))
- {
- const string queryCurrencyCodes = "SELECT WALUTA_KOD FROM WALUTA";
- //lista kodów walut z bazy danych
- var currencyCodesListDB = connection.Query<string>(queryCurrencyCodes).ToList();
- //usuwanie spacji z kodów walut z bazy danych
- for (var i = 0; i < currencyCodesListDB.Count; i++)
- {
- currencyCodesListDB[i] = currencyCodesListDB[i].Trim();
- }
- return currencyCodesListDB;
- }
- }
- #endregion
- #region GetCurrencyCourse
- /// <summary>
- /// metoda do pobierania aktualnego kursu walut
- /// </summary>
- private static List<Currency> ImportData(string url)
- {
- //tworzenie połączenia z podanym url
- var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
- //wysyła request i czeka na odpowiedź
- var myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
- //pobiera stream związany z odpowiedzią
- var receiveStream = myHttpWebResponse.GetResponseStream();
- var encode = System.Text.Encoding.GetEncoding("iso-8859-2");
- using (var readStream = new StreamReader(receiveStream, encode))
- {
- var readedData = readStream.ReadToEnd();
- myHttpWebResponse.Close();
- var xmlDoc = new XmlDocument();
- xmlDoc.LoadXml(readedData);
- var currencyListXml = xmlDoc.GetElementsByTagName("pozycja");
- var date = xmlDoc.GetElementsByTagName("data_publikacji");
- //wyciągnięcie numeru tabeli
- var tableNumber = xmlDoc.SelectSingleNode("tabela_kursow/numer_tabeli/text()");
- Console.WriteLine(string.Concat("Numer tabeli: ", tableNumber.Value));
- var currencyDate = Convert.ToDateTime(date[0].FirstChild.Value);
- return (from XmlNode currencyXml in currencyListXml
- select new Currency
- {
- CurrencyName = currencyXml.SelectSingleNode("nazwa_waluty").FirstChild.Value,
- Converter = currencyXml.SelectSingleNode("przelicznik").FirstChild.Value,
- CurrencyCode = currencyXml.SelectSingleNode("kod_waluty").FirstChild.Value,
- CurrencyRate = Convert.ToDouble(currencyXml.SelectSingleNode("kurs_sredni").FirstChild.Value),
- CurrencyTableNumber = Convert.ToString(tableNumber.Value), CurrencyDate = currencyDate
- }).ToList();
- }
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement