2013-08-07 2 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); 
    } 
관련 문제