1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
//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);
}
|