Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / Interop / December 2007

Tip: Looking for answers? Try searching our database.

Saving dataset to XML and reading back gives different data

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Lucvdv - 18 Dec 2007 09:46 GMT
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>
....
Lucvdv - 18 Dec 2007 10:04 GMT
Sorry, forgot to specify: using VS2005 with all current updates, framework
2.0 SP1.
John Saunders [MVP] - 18 Dec 2007 11:34 GMT
> This would better be described by 'serialization' than 'interop', but I
> didn't find a newsgroup that seems closer on topic.
[quoted text clipped - 50 lines]
>  </xs:element>
> </xs:schema>

What is the column.DataType of the byte[] column after you have called
ReadXmlSchema?
Signature

--------------------------------------------------------------------------------
John Saunders | MVP - Windows Server System - Connected System Developer

Lucvdv - 18 Dec 2007 11:58 GMT
> > 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.
Lucvdv - 18 Dec 2007 12:23 GMT
> > > Then in another app, I load them back into a new empty dataset using
> > > DataSet.readXmlSchema and DataSet.ReadXml.  The schema is read first.
[quoted text clipped - 12 lines]
> ('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.
Tony Gravagno - 18 Dec 2007 19:41 GMT
>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

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.