1

我有返回 XML 的 MS SQL Server 存储过程(它使用 SELECT 和for xml auto, elements

我尝试将其读入 DataTable:

            DataTable retTable = new DataTable();
            SqlCommand comm = new SqlCommand("exec MySP", connection);
            SqlDataAdapter da = new SqlDataAdapter(comm);
            connection.Open();
            da.Fill(retTable); 

但 retTable 包含 12 行,其中包含 SQL Server 返回的分隔完整 xml。

如何将 XML 从 DB 读取到 DataTable 对象中?谢谢!

4

2 回答 2

0

你到底想在这里完成什么?听起来您正在存储过程中构建一个 XML 字段,并且它被完全放置在您的 DataTable 中,即单个 XML 字段。这是预期的行为。所以我猜最大的问题,正如上面评论中所问的,如果你想让它成为代码中的一个表,为什么数据首先要形成 XML?

您可以做的一件事是使用LINQ to XML(或一些类似的 XML DOM 解析方法)查询返回的结果,以从返回的字段中获取您需要的数据。它应该感觉相当简单,因为您期望使用表数据并且 LINQ 具有“SQL 感觉”。

但是,您可能在这个问题中遗漏了一个重要的点,即表和 XML 之间的结构差异。表是关系的,XML 是分层的。它们旨在以完全不同的方式表示数据。话虽如此,返回的 XML 完全有可能无法直接转换为单个 DataTable 对象。它可能不代表数据表。

于 2010-12-21T15:50:49.797 回答
0
DataSet retTable = new DataSet();
SqlConnection con = new SqlConnection("data source=servername;initial catalog=databasename;uid=userid;pwd=password");
SqlCommand cmd = new SqlCommand("GetMyXmlDate", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
string xmlDoc = "";
using (XmlReader reader = cmd.ExecuteXmlReader())
{
  while (reader.Read())
  {
    xmlDoc  = xmlDoc +  reader.ReadOuterXml();
  }
}

var dataStream = new MemoryStream();
var dataWriter = new StreamWriter(dataStream);
dataWriter.Write(xmlDoc);
dataWriter.Flush();
dataStream.Position = 0;
retTable.ReadXml(dataStream);
Grid.DataSource = retTable.Tables[0].DefaultView;
于 2016-02-03T04:45:44.267 回答