[Mono-list] Datasets passed between methods loses data

Atsushi Eno atsushi@ximian.com
Mon, 07 Mar 2005 20:16:58 +0900


Hello,

Oh, so if all data content is inside the DataSet, it should output
them for GetXml() output. Then please file it to bugzilla and
attach the reproducible server.log there (it would be nice if you
cut the file as small as possible).

Thanks,
Atsushi Eno

anthony whalley wrote:
> Hi Atsushi
> 
> I should of been more explicit in my example.
> If I call 
>  ds.GetXml(); 
> in the GetLogFile method before passing it over
> then it returns the full XML document and
> I can also access the full structure using 
> the usual methods. e.g. ds.Tables[0]
> 
> It is only when I pass it to a new method that 
> the issue arises. 
> 
> Thanks for the hint on the loading of 
> mal formed XML but the file i am loading
> is the Xml formatted log from log4net not
> a tab deliniated. 
> 
> TTFN 
> 
> tont
> 
> 
> ----- Original Message -----
> From: Atsushi Eno <atsushi@ximian.com>
> Date: Monday, March 7, 2005 10:07 am
> Subject: Re: [Mono-list] Datasets passed between methods loses data
> 
> 
>>Hello,
>>
>>Actually it depends on the content of "server.log" since the XML
>>structure is not determined only with that code. If that log file
>>contains only simple text (BTW that code is really not recommended
>>because it will raise an XmlException if there is broken XML
>>fragment), it won't return any XML content, since that simple text
>>content is not mapped to any DataTable, nor the "root" element is
>>not regarded as a DataTable.
>>
>>DataSet is not such universal XML store. It just holds such contents
>>that is mappable to table set structure and ReadXml() ignores
>>other content. Just FYI, MS.NET also ignores the text content.
>>
>>Atsushi Eno
>>
>>anthony whalley wrote:
>>
>>>Hi All 
>>>
>>>I am writing an application that marshells a log4net 
>>>file into a dataset and then passes the dataset
>>>over to another method. I am using v 1.1.4 from the 
>>>RPMs on Suse 9.2 and below is the code.
>>>However when I test the dataset returned it 
>>>has only a root node even though before
>>>it is passed it has all the data inside it. 
>>>I have solved the prolem for now by passing over
>>>the data as a string type and marhalling the 
>>>data there but wondered if I should
>>>report it as a bug?? 
>>>
>>>public class obj{
>>>        	public DataSet GetLogFile()
>>>        	{
>>>                	DataSet ds = new DataSet() ;
>>>                	try 
>>>                	{
>>>                        	string _logLocation = 
>>
>>Environment.CurrentDirectory + Path.DirectorySeparatorChar + 
>>"server.log" ;
>>
>>>                        	Stream stm = File.Open(_logLocation, 
>>
>>FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ;
>>
>>>                        	
>>>                        	StreamReader str = new 
>>
>>StreamReader(stm) ;
>>
>>>                        	ds.ReadXml(new StringReader("<root 
>>
>>xmlns:log4net='" target="l">http://logging.apache.org/log4net/LogSchema'>" + 
>>
>>>                                	str.ReadToEnd() + 
>>>                                	"</root>")) ;
>>>                        	str.Close();
>>>                        	stm.Close();
>>>                        	
>>>                	}
>>>                	catch(Exception e)
>>>                	{
>>>                        	log.Error("Get log file error", e) ; 
>>>                	}
>>>                	return ds ;
>>>        	}
>>>}
>>>
>>>public class otherObj
>>>{
>>>
>>>  obj o = new obj() ;
>>>  DataSet ds = new DataSet() ;
>>>  public void testxml(){
>>>  ds = o.GetLogFile() ;
>>>  Console.WriteLine(ds.GetXml()); //returns <root />
>>>}
>>>}
>>>
>>>
>>>
>>>
>>>_______________________________________________
>>>Mono-list maillist  -  Mono-list@lists.ximian.com
>>>http://lists.ximian.com/mailman/listinfo/mono-list
>>>
>>
>>
> 
>