2011-07-11 13 views
3

SQL ServerデータベースでXml形式で保存されているデータを読み込みましたが、このデータを読み込むためにC#を使用しています。 System.XmlにXmlTextという型がありますが、SqlXmlからXmlTextにデータを変換して格納することはできません。データベースからXML形式のデータをいくつかのオブジェクトにコピーし、そのオブジェクトをシリアル化する必要があります。次に、ネットワーク上でオブジェクトのコレクションを送信する必要があります。ここの解決策は何ですか?SqlXmlをXmlTextに変換するにはどうすればよいですか?

+0

どのように*現在*データを読み込みますか?あなたは['ExecuteXmlReader()'](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executexmlreader.aspx)経由でそれを読んでいますか?または、他の何か? –

+0

thats問題です。私はデータベースからデータを読み取ることができません。 – Chani

+0

String s = reader.GetString(6)はStringで動作しますが、XmlText xml = reader.GetSqlXml(7)は機能しません。 – Chani

答えて

8

最終的にSqlXmlXmlTextの間に直接のリンクはありません(実際には、XmlTextはxmlではなく特定のタイプのノードを表します)。 stringまたはbyte[]レベルに降りて、もう一度バックアップする必要があります(ストリーミングリーダーを使用していないため)。例えば:XmlReader APIを使用して

string xml = reader.GetSqlXml(7).Value; 
XElement el = XElement.Parse(xml); 

又は(おそらくより効率的):

string xml = reader.GetSqlXml(7).Value; 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 

又は

XmlDocument doc = new XmlDocument(); 
using(XmlReader xr = reader.GetSqlXml(7).CreateReader()) { 
    doc.Load(xr); 
} 

XElement el; 
using(XmlReader xr = reader.GetSqlXml(7).CreateReader()) { 
    el = XElement.Load(xr); 
}