Hallo :-)
Unter http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html#dowloads
sind Währungskurse von 1999 bis heute als XML-Dateien verfügbar.
Mit dieser Methode könnt Ihr diese Daten auslesen und in eine Datenbank speichern.
Die Tabelle der Datenbank enthält drei Spalten:
Datum (Datetime),
Waehrung (nchar(3)),
Kurs (decimal(18,4))
Ganz unten findet Ihr ein Beispiel wie diese Methode aufgerufen werden könnte.
//using System;
//using System.Data;
//using System.Data.SqlClient;
//using System.Net;
//using System.Xml;
private void WaehrungsKursInDatenbankSpeichern(String urlDerXML, String zielTabelle, SqlConnection con)
{
XmlTextReader xmlReader;
DataTable dtWechselkurs = new DataTable();
dtWechselkurs.Columns.Add(new DataColumn("Datum",System.Type.GetType("System.DateTime")));
dtWechselkurs.Columns.Add(new DataColumn("Waehrung", System.Type.GetType("System.String")));
dtWechselkurs.Columns.Add(new DataColumn("Kurs", System.Type.GetType("System.Decimal")));
try
{
//XML-Daten übers Internet einlesen
xmlReader = new XmlTextReader(urlDerXML);
}
catch( WebException )
{
throw new WebException("Währungsdaten konnten nicht abgerufen werden!");
}
try
{
DateTime tempDatum = DateTime.Now;
String tempWaehrung;
Decimal tempKurs;
while (xmlReader.Read())
{
if (xmlReader.Name != "")
{
for (int i = 0; i < xmlReader.AttributeCount; i++)
{
//Prüfen ob es den Knoten/Element 'Cube' gibt
if (xmlReader.Name == "Cube")
{
//Falls der Knoten/Element nur 1 Attribut enthält, ist dies das Datum
if (xmlReader.AttributeCount == 1)
{
//Datum auslesen
xmlReader.MoveToAttribute("time");
tempDatum = DateTime.Parse(xmlReader.Value);
}
//Sind 2 Attribute im aktuellen Knoten/UnterElement, enthält dieser WährungsKürzel und Kurswert
if (xmlReader.AttributeCount == 2)
{
//Währung auslesen
xmlReader.MoveToAttribute("currency");
tempWaehrung = xmlReader.Value;
//Kurs auslesen
xmlReader.MoveToAttribute("rate");
tempKurs = decimal.Parse(xmlReader.Value.Replace(".", ",")); // Komma als DecimalSymbol
//ausgelesene Werte zusammen in einer neuen Zeile eintragen
DataRow neueZeile = dtWechselkurs.NewRow();
neueZeile["Datum"] = tempDatum;
neueZeile["Waehrung"] = tempWaehrung;
neueZeile["Kurs"] = tempKurs;
dtWechselkurs.Rows.Add(neueZeile);
}
xmlReader.MoveToNextAttribute();
}
}
}
}
//Verbindung zur Datenbank herstellen
con.Open();
//Alle Kurse wurden in dtWechselkurs eingefügt und werden jetzt an die Datenbank geschickt
SqlBulkCopy bcopy = new SqlBulkCopy(con);
bcopy.DestinationTableName = zielTabelle;
bcopy.WriteToServer(dtWechselkurs);
con.Close();
MessageBox.Show("Währungskurs erfolgreich eingefügt");
}
catch (Exception e)
{
MessageBox.Show(e.Message,"Währungskurs konnte nicht importiert werden");
}
}
//es folgt ein Beispiel zum Aufruf der Methode
private void BeispielAufruf_WährungSpeichern(object sender, EventArgs e)
{
String urlDerXML = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml";
//folgende Kursdaten sind verfügbar:
//Kurse von heute = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml"
//letzten 90 Tage = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml";
//Kurse seit 1999= "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.xml";
String zielTabelle = "Wechselkurs";
//Verbindungsaufbau definieren
SqlConnectionStringBuilder conBuilder = new SqlConnectionStringBuilder();
conBuilder.DataSource = "(local)"; //kann auch eine IP oder Name sein, dann ohne Klammern
conBuilder.InitialCatalog = "knoxyz";
conBuilder.ConnectTimeout = 10;
conBuilder.IntegratedSecurity = true; //oder User & Password
//conBuilder.UserID = "knoxyz";
//conBuilder.Password = "xyz";
SqlConnection con = new SqlConnection(conBuilder.ConnectionString);
WaehrungsKursInDatenbankSpeichern(urlDerXML,zielTabelle,con);
}
7 Kommentare zum Snippet