FOR XML RAW
次の形式のようなXML 生データを返すストアド プロシージャがあります。
<row
codelistid="1" codelistname="LOCATION"
codeid="1557" codename="Hors Ile de France" languageid="1" />
Management Studio でストアド プロシージャを実行すると、1765 行分のデータが返されますが、C# コードからプロシージャを呼び出すと、その 882 の約半分のように見えます。戻ってきた
xmlreader を使用して XML を行ごとに返し、各行を XElement として結果の XDocument に追加しています。
データを取得する方法は次のとおりです。
using (SqlConnection conn = new SqlConnection(con))
{
XDocument results = new XDocument(
new XElement("results"));
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "MyStoredProc";
conn.Open();
var count = 0;
using (XmlReader reader = cmd.ExecuteXmlReader())
{
while (reader.Read())
{
results.Root.Add(XElement.Parse(reader.ReadOuterXml()));
count += 1;
}
}
return results;
}
}
XML ではなくデータを出力するように SPROC を変更し、SQLDataReader を介して読み取ると、正常に動作するようです。
理想的にはデータベースが XML を返すようにしたいので、なぜこれが起こっているのか、誰にもアイデアがありますか?
前もって感謝します。