XML mit e+003 Werten einlesen

21/11/2008 - 10:36 von Tom | Report spam
Hallo zusammen,

ich habe folgende Problematik. Ich bekomme ein XML-File in
nachfolgendem Format geliefert


<?xml version="1.0" encoding="utf-8"?>
<Data>
<pos>
<Date>2008-11-17</Date>
<BusinessArea>MB</BusinessArea>
<VaR>4.582669314233800e-002</VaR>
</pos>
<pos>
<Date>2008-11-17</Date>
<VaR>0.000000000000000e+000</VaR>
</pos>
<pos>
<Date>2008-11-17</Date>
<VaR />
</pos>
</Data>


D.h. mal ist der Wer VAR mit e+002 etc. gefüllt oder auch leer.
Diesen
will ich mit


XmlDocument xmlDocument = new XmlDocument();
DataSet dsXML = new DataSet();
xmlDocument.Load("XMLFile.xml");
dsXML.ReadXml(new XmlNodeReader(xmlDocument));
..
result = mySqlDataAdapter.Update(dsxml,
tablename);



in eine SQL Tabelle schreiben. Das Feld ist in der Tabelle als float
definiert.Folgende Fragen:
a) Wie bekomme ich auch ein leeres Feld in die Tabelle? Die DB kommt
immer mit dem Fehler "Konvertierung des Parameters von String in
Double fehlgeschlagen" wenn das Feld VAR so aus sieht <VaR />


Defieneiere ich das Tabellenfeld als text wird es zwar richtig
eingelesen, aber ich kann es nicht in float oder decimal
konvertieren.


b) Die Zahlen kommen mit Dezimaltrenner Punkt anstatt Komma. Damit
stimmt die Wertigkeit nicht mehr wen ich sie einlese.Aus
4.582669314233800e-002 welches 0,045826693142338 ist macht der SQL-
Server 45826693142338


Für Hilfe wàre ich dankbar


Gruß


Tom
 

Lesen sie die antworten

#1 Martin Honnen
21/11/2008 - 12:58 | Warnen spam
Tom wrote:

<pos>
<Date>2008-11-17</Date>
<VaR />
</pos>
</Data>

XmlDocument xmlDocument = new XmlDocument();
DataSet dsXML = new DataSet();
xmlDocument.Load("XMLFile.xml");
dsXML.ReadXml(new XmlNodeReader(xmlDocument));



Warum làdst du erst in ein XmlDocument?
dsXml.ReadXml("XMLFile.xml");
reicht doch. Aber das nur am Rande.


a) Wie bekomme ich auch ein leeres Feld in die Tabelle? Die DB kommt
immer mit dem Fehler "Konvertierung des Parameters von String in
Double fehlgeschlagen" wenn das Feld VAR so aus sieht <VaR />



Benutzt du ein Schema? In diesem musst nillable="true" setzen:
<xsd:element name="VaR" type="xsd:double" nillable="true"/>
im XML-Instanz-Dokument dann xsi:nil="true"
<VaR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:nil="true"/>
In der DataTable wird dann ein NULL-Wert benutzt.


b) Die Zahlen kommen mit Dezimaltrenner Punkt anstatt Komma. Damit
stimmt die Wertigkeit nicht mehr wen ich sie einlese.Aus
4.582669314233800e-002 welches 0,045826693142338 ist macht der SQL-
Server 45826693142338




Das sollte eigentlich nicht passieren, wenn der Schemadatentyp als
xsd:double definiert ist. Hast du noch Konvertierungscode, den du nicht
gezeigt hast?



Martin Honnen MVP XML
http://JavaScript.FAQTs.com/

Ähnliche fragen