2013-08-07 142 views
0

我一直在嘗試使用OleDb從SQL Server中讀取XML數據。使用OleDbDataReader從SQL Server中讀取XML

private static void Main(string[] args){ 
    var con = new OleDbConnection("Provider=SQLNCLI11.1;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Temp"); 
    var cmd = new OleDbCommand(
       "SELECT [Id] ,[Description] FROM [Temp].[dbo].[SomeTable] where [Id]= 1 for xml path, root('root')", con); 

    con.Open(); 
    byte[] result = null; 

    OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

    while (reader.Read()){ 
     result = (byte[]) reader[0]; 
    } 

    MemoryStream stream = new MemoryStream(result); 
    stream.Position = 0; 

    XmlDocument doc = new XmlDocument(); 
    doc.Load(stream); 

    Console.Out.WriteLine(doc.OuterXml); 
} 

它沒有說,數據格式不正確。如果我將字節數組轉換爲字符串,我會看到很多「奇怪」的字符。我做錯了什麼?

回答

0

因爲結果是直接的XML我相信你正面臨着問題。你需要得到的結果在行集而不是標量。 閱讀爲字符串,使用LoadXML而不是流。

以下是我更改的代碼。

private static void Main(string[] args) 
    { 
     var con = new OleDbConnection("Provider=SQLNCLI11.1;Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Temp"); 
     var cmd = new OleDbCommand(
        "Select (SELECT [Id] ,[Description] FROM [Temp].[dbo].[SomeTable] where [Id]= 1 for xml path, root('root')) AS XML", con); 

     con.Open(); 
     string result = string.Empty; 

     OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

     while (reader.Read()) 
     { 
      result = reader[0].ToString(); 
     } 
     con.Close(); 

     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(result); 

     Console.Out.WriteLine(doc.OuterXml); 
    } 
相關問題