By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,665 Members | 1,363 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,665 IT Pros & Developers. It's quick & easy.

Saving dataset to XML and reading back gives different data

P: n/a
This would better be described by 'serialization' than 'interop', but I
didn't find a newsgroup that seems closer on topic.

The problem in a few words: I save data with DataSet.WriteXML, but I get
different data back when I read it later with DataSet.ReadXml.

More detail:

I'm saving a dataset containing a single datatable to an XML file
(DataSet.WriteXml), and its schema to an xsd file (DataSet.WriteXmlSchema).

Then in another app, I load them back into a new empty dataset using
DataSet.readXmlSchema and DataSet.ReadXml. The schema is read first.
What's "special" is that one of the columns doesn't contain a simple text
or numeric data type, but binary data (an array of BYTE, currently fixed at
8 bytes for testing, it will be replaced by variable-length encrypted data
later).
When it is saved into the XML file, the binary data are automatically
encoded in Base64.

Now the problem is that when this is read back later, nothing gets decoded.
Instead of a copy of the original bytes I put in, I get a larger array with
the Base64 representation.

The schema as saved by WriteXmlSchema looks like this:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PasswordList" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="PasswordList" msdata:IsDataSet="true"
msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="PasswordData">
<xs:complexType>
<xs:sequence>
<xs:element name="License" type="xs:base64Binary"
minOccurs="0" />
<xs:element name="Password" type="xs:base64Binary"
minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

Some sample (test) data from the XML file:

<PasswordList>
<PasswordData>
<License>QjAwMDAwMg==</License>
<Password>dzB2KnQ3eGc=</Password>
</PasswordData>
<PasswordData>
<License>QjAwMzMwMA==</License>
<Password>Q0wuNko5VTQ=</Password>
</PasswordData>
.....
Dec 18 '07 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Sorry, forgot to specify: using VS2005 with all current updates, framework
2.0 SP1.
Dec 18 '07 #2

P: n/a
"Lucvdv" <re**********@null.netwrote in message
news:lq********************************@4ax.com...
This would better be described by 'serialization' than 'interop', but I
didn't find a newsgroup that seems closer on topic.

The problem in a few words: I save data with DataSet.WriteXML, but I get
different data back when I read it later with DataSet.ReadXml.

More detail:

I'm saving a dataset containing a single datatable to an XML file
(DataSet.WriteXml), and its schema to an xsd file
(DataSet.WriteXmlSchema).

Then in another app, I load them back into a new empty dataset using
DataSet.readXmlSchema and DataSet.ReadXml. The schema is read first.
What's "special" is that one of the columns doesn't contain a simple text
or numeric data type, but binary data (an array of BYTE, currently fixed
at
8 bytes for testing, it will be replaced by variable-length encrypted data
later).
When it is saved into the XML file, the binary data are automatically
encoded in Base64.

Now the problem is that when this is read back later, nothing gets
decoded.
Instead of a copy of the original bytes I put in, I get a larger array
with
the Base64 representation.

The schema as saved by WriteXmlSchema looks like this:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="PasswordList" xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="PasswordList" msdata:IsDataSet="true"
msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="PasswordData">
<xs:complexType>
<xs:sequence>
<xs:element name="License" type="xs:base64Binary"
minOccurs="0" />
<xs:element name="Password" type="xs:base64Binary"
minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
What is the column.DataType of the byte[] column after you have called
ReadXmlSchema?
--
--------------------------------------------------------------------------------
John Saunders | MVP - Windows Server System - Connected System Developer
Dec 18 '07 #3

P: n/a
On Tue, 18 Dec 2007 06:34:28 -0500, "John Saunders [MVP]" <john.saunders at
trizetto.comwrote:
"Lucvdv" <re**********@null.netwrote in message
news:lq********************************@4ax.com...
Then in another app, I load them back into a new empty dataset using
DataSet.readXmlSchema and DataSet.ReadXml. The schema is read first.
Now the problem is that when this is read back later, nothing gets
decoded.
Instead of a copy of the original bytes I put in, I get a larger array
with the Base64 representation.
What is the column.DataType of the byte[] column after you have called
ReadXmlSchema?
It's System.Byte[]

My original post was a little unclear about something when I re-read it
('one of the columns' wasn't accurate), so I'll fix that here: there are
two columns, each containing a byte array. The problem occurs for both.
Dec 18 '07 #4

P: n/a
On Tue, 18 Dec 2007 12:58:58 +0100, Lucvdv <re**********@null.netwrote:
On Tue, 18 Dec 2007 06:34:28 -0500, "John Saunders [MVP]" <john.saunders at
trizetto.comwrote:
"Lucvdv" <re**********@null.netwrote in message
news:lq********************************@4ax.com...
Then in another app, I load them back into a new empty dataset using
DataSet.readXmlSchema and DataSet.ReadXml. The schema is read first.
Now the problem is that when this is read back later, nothing gets
decoded.
Instead of a copy of the original bytes I put in, I get a larger array
with the Base64 representation.
What is the column.DataType of the byte[] column after you have called
ReadXmlSchema?

It's System.Byte[]

My original post was a little unclear about something when I re-read it
('one of the columns' wasn't accurate), so I'll fix that here: there are
two columns, each containing a byte array. The problem occurs for both.

And now it gets really strange: I closed Visual Studio for my lunch break,
reopen it when I get back, and the problem is gone.

I now get the correct data. Where I got an array of 15 bytes containing
what looked like the BASE64 data plus a few extra before, I now get an
array of 8 bytes containing the correct data.

Dec 18 '07 #5

P: n/a
Lucvdv wrote:
>And now it gets really strange: I closed Visual Studio for my lunch break,
reopen it when I get back, and the problem is gone.
Which part is really strange - the part where you get a lunch break,
the part that you come back after lunch, or the part about the problem
being gone?

Tony Gravagno
Nebula Research and Development

Latest blog:
Stumped again - Strongly Typed Datasets from XML Schema
remove.munge.pleaseNebula-RnD.com/blog
Dec 18 '07 #6

This discussion thread is closed

Replies have been disabled for this discussion.