0

OleDb を使用して 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);
}

データの形式が正しくないと言って失敗します。バイト配列を文字列に変換すると、多くの「奇妙な」文字が表示されます。私が間違っていることは何ですか?

4

1 に答える 1

1

結果は直接の 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);

        if (reader.Read())
        {
            result = reader[0].ToString();
        }
        con.Close();
     
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(result);

        Console.Out.WriteLine(doc.OuterXml);
    }
于 2013-08-07T12:58:17.950 に答える