Asp.net 将[for xml auto,elements]读入ADO.NET中的DataTable

Asp.net 将[for xml auto,elements]读入ADO.NET中的DataTable,asp.net,sql-server,xml,datatable,readxml,Asp.net,Sql Server,Xml,Datatable,Readxml,我有一个MS SQL Server存储过程,它返回它对XML自动元素使用SELECT的XML 我尝试将其读入数据表: DataTable retTable = new DataTable(); SqlCommand comm = new SqlCommand("exec MySP", connection); SqlDataAdapter da = new SqlDataAdapter(comm);

我有一个MS SQL Server存储过程,它返回它对XML自动元素使用SELECT的XML

我尝试将其读入数据表:

            DataTable retTable = new DataTable();
            SqlCommand comm = new SqlCommand("exec MySP", connection);
            SqlDataAdapter da = new SqlDataAdapter(comm);
            connection.Open();
            da.Fill(retTable); 
但retTable包含12行,其中包含单独的完整xml或SQL Server返回

如何将该XML从DB读入DataTable对象?
谢谢

你到底想在这里完成什么?这听起来像是在存储过程中构建一个XML字段,并且它被准确地放置在数据表中,一个XML字段。这是预期的行为。因此,我想最大的问题是,正如上面评论中所问的,如果您希望数据成为代码中的一个表,那么为什么首先要将数据形成XML

您可以做的一件事是使用XML DOM解析或类似的方法来查询返回的结果,以从返回的字段中获取所需的数据。它应该感觉相当简单,因为您希望处理表数据,而LINQ有SQL的感觉


然而,在这个问题中您可能遗漏了一个重要的点,那就是表和XML之间的结构差异。表是关系型的,XML是层次型的。它们被设计成以完全不同的方式表示数据。也就是说,返回的XML完全可能无法直接转换为单个DataTable对象。它可能不代表一个数据表。

我不确定我是否理解你的问题;您是否正在尝试将收到的XML分解回一个表中?如果是这样的话,那么为什么首先要将其转换为XML?不幸的是,SP返回了XML,我无法更改硬SP,因为它在许多地方都使用它。谢谢回复!
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;