2011-11-08 13 views
2

我如何讀一個模式轉換爲數據表在C#表模式,使數據表中的C#

<header> 
    <xs:schema id="header" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="header" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="Table"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="id" type="xs:int" minOccurs="0" /> 
       <xs:element name="enteredon" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="enteredby" type="xs:string" minOccurs="0" /> 
       <xs:element name="remark" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
</header> 

嘗試這個代碼,但失敗:

public static Stream StringToStream(string data) 
{ 
    try 
    { 
     System.IO.MemoryStream xmlStream = new System.IO.MemoryStream(); 
     StreamWriter writer = new StreamWriter(xmlStream); 
     writer.Write(data); 
     writer.Flush(); 
     return xmlStream; 
    } 
    catch (Exception) 
    { 
     return null; 
    } 
} 

table.ReadXmlSchema(StringToStream(saveData)); 
+0

當你說失敗時,你的意思是什麼?它是否會拋出異常?它是否讀取模式的一部分?它是否安靜地崩潰,等等。 –

回答

4

您的代碼將拋出「根元素是缺少」例外。

我在DaniWeb找到了一個解決方案,它是添加下面的代碼來重置位置。

System.IO.MemoryStream xmlStream = new System.IO.MemoryStream(); 
    StreamWriter writer = new StreamWriter(xmlStream); 
    writer.Write(data); 
    writer.Flush(); 
    xmlStream.Position = 0;//Add this to reset the position of the stream. 

請重試。

+0

你真棒,那是我得到的確切的錯誤,並設置位置爲0做了詭計。謝謝。 – gangt