从.NET调用时,从SQL Server 2005返回的Xml原始数据不正确
本文关键字:返回 Xml 不正确 原始数据 2005 Server NET 调用 SQL | 更新日期: 2023-09-27 17:59:39
我有一个存储过程,它返回XML原始数据FOR XML RAW
,格式如下:
<row
codelistid="1" codelistname="LOCATION"
codeid="1557" codename="Hors Ile de France" languageid="1" />
当我在Management Studio中运行存储过程时,会返回1765行的数据,但当我从C#代码中调用该过程时,它似乎是882行的一半左右。似乎如果两行有相同的代码ID,那么只有一行返回
我使用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;
}
}
如果将查询数据放入数据集中,然后将该数据集写入XML,该怎么办?
public GetXmlFromDataSet()
{
DataSet myDataSet = new DataSet();
DbDataAdapter myDataAdapter = DatabaseFactory.CreateDataAdapter();
DbConnection DatabaseConnection = new DatabaseConnection(/*put appropriate values here*/);
XmlTextWriter myXmlTextWriter = new XmlTextWriter(/*put appropriate values here*/)
myDataDapter.SelectCommand = DatabaseFactory.CreateCommand();
myDataDapter.SelectCommand.CommandType = CommandType.StoredProcedure;
myDataAdapter.CommentText = "EXEC MyStoredProc";
myDataAdapter.SelectCommand.Connection = DatabaseConnection;
myDataAdapter.Fill(myDataSet);
myDataSet.WriteXml(myXmlWriter);
}