从.NET调用时从SQL Server 2005中返回的XML原始数据不正确(Xml Raw dat

2019-10-17 17:37发布

我有一个存储过程返回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通过行,然后追加每行作为一个的XElement我结果的XDocument返回XML列。

这里是我正在检索数据:

 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,并通过SqlDataReader的读它,它似乎很好地工作。

任何人有为什么发生这种情况,我会非常喜欢的数据库返回XML的任何想法?

提前致谢。

Answer 1:

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;

                }
            }


Answer 2:

怎么样,如果你有放入DataSet中的查询数据,然后写入数据设置为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);
}


文章来源: Xml Raw data returned from SQL Server 2005 not correct when calling from .NET