2013-08-07 86 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); 
    } 
相关问题