domenica 21 dicembre 2008

Data Table "Inferenza" risolta

Tempo addietro avevo accennato al problema dell'infernza nell'atto di import di un file xml in una data table...

Il problema può essere risolto con molta semplicità il tutto dipende come sempre dalla situazione iniziale.

Caso 1






Field1Field2Field3
1LuendiMarzo
2MartediMarzo
3MercolediMarzo


Abbiamo eseguito DataTable.WriteXml(_FileName);
in _FileName troveremo il classico file Xml con il record di dichiarazione e i dati.

Conseiderati questi dati rileggendo i dati con DataTable.ReadXml(_FileName) non si verificheranno problemi di inferenza.

Caso 2






Field1Field2Field3
1Luendi
2Martedi
3MercolediMarzo


Abbiamo eseguito DataTable.WriteXml(_FileName);
in _FileName troveremo il classico file Xml con il record di dichiarazione e i dati.

Conseiderati questi dati rileggendo i dati con DataTable.ReadXml(_FileName) per la colonna field 3 potrebbero verificarsi problemi di infernza questo perchè solo un elemento (il 3) ha valorizzato correttamente il campo.

Se il file non è stato scritto da noi, l'unica è leggerlo prelevare per ogni nodo tutte le definizioni, e dichiarare tutte le colonne

for (int i =0 ; i < ColumnsReaded.Length-1 ; i++) { DataTable.Columns.Add(ColumnsReaded[i].ToString()); } DataTable.ReadXml(_FileName) ;

Tuttavia la soluzione migliore è evitarsi il problema alla radice....
DataTable.WriteXml(_FileName, XmlWriteMode.WriteSchema);
In questo modo qualunque sia lo schema della tabella verrà salvato nel file xml.

giovedì 18 dicembre 2008

DataTable non supporta l'inferenza di schema proveniente da Xml.

Che cosa vuol dire ?

più o meno il concetto è "la data table non riesce a capire che colonne dovrà creare al suo interno".

Questo problema si verifica quando stato leggendo un file xml generato o da una datatable o tipicamente errato.

Provate a verificare le colonne che state leggendo se per esempio per ogni row presente nel file c'e' lo stesso numero
di colonne. O se esiste nel file qualche carattere che non ci dovrebbe essere.

cerco una soluzione e la pubblico.. sempre che ci sia... !!