我有一个返回 XML 原始数据的存储过程 FOR XML RAW
类似于以下格式:
<row
codelistid="1" codelistname="LOCATION"
codeid="1557" codename="Hors Ile de France" languageid="1" />
当我在 Management Studio 中运行存储过程时,返回了 1765 行数据,但是当我从我的 C# 代码调用该过程时,它似乎是 882 行的一半左右。似乎如果两行具有相同的 codeid 那么只返回一个
我正在使用 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;
}
}
如果我更改 SPROC 以输出数据而不是 XML 并通过 SQLDataReader 读取它,它似乎工作正常。
任何人都知道为什么会发生这种情况,因为我希望数据库返回 XML?
提前致谢。
最佳答案
reader.Read()
和 reader.ReadOuterXml()
在同一个循环中会跳过一行。试试这个:
using (XmlReader reader = cmd.ExecuteXmlReader())
{
reader.Read(); //For initial first read.
while (!reader.EOF)
{
results.Root.Add(XElement.Parse(reader.ReadOuterXml()));
count += 1;
}
}
关于c# - 从 .NET 调用时从 SQL Server 2005 返回的 Xml 原始数据不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14899353/