woensdag 22 augustus 2007

Wanneer is een dataset geen dataset?

Als je in .Net een typed dataset aanmaakt en deze wegschrijft met typedDataSet.WriteXml("c:\xml",XmlWriteMode.WriteSchema)
Dan schrijf je een TYPED diffgram weg. Een typed diffgram is geen normale DataSet en als je dan probeerd hem in te lezen met untypedDS.ReadXml("pad" XmlReadMode.DiffGram) dan krijg je een dataset zonder tables.

Dit komt vast omdat de diffgram teveel informatie bevat, een hacky oplossing is als volgt:

XmlDataDocument dd = new XmlDataDocument();
dd.Load("c:\pad.xml");
string info = dd.FirstChild.NextSibling.InnerXml.ToString();
byte[] byteArray = new byte[info.Length];
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byteArray = encoding.GetBytes(info.ToCharArray());
MemoryStream ms = new MemoryStream(byteArray);
ds.ReadXml(ms);

Hier leest de code de diffgram in een XmlDataDocument en maakt vervolgens van de Firstchild.nextsibling een dataset.