1

XML を返す MS SQL Server ストアド プロシージャがあります ( for xml auto, elements でSELECT を使用します) 。

私はそれをDataTableに読み込もうとしました:

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

ただし、retTable には、SQL Server が返す完全な xml が分離された 12 行が含まれています。

その XML を DB から DataTable オブジェクトに読み込むにはどうすればよいですか? ありがとう!

4

2 に答える 2

0

ここで何を達成しようとしていますか?ストアドプロシージャでXMLフィールドを構築していて、それが単一のXMLフィールドとまったく同じようにDataTableに配置されているようです。これは予想される動作です。したがって、上記のコメントで尋ねられたように、最大​​の質問は、データをコード内のテーブルにしたいのに、そもそもデータがXMLに形成されるのはなぜですか?

できることの1つは、LINQ to XML(またはXML DOM解析の同様のアプローチ)を使用して、返された結果をクエリし、返されたフィールドから必要なデータを取得することです。テーブルデータを操作することを期待していて、LINQにはその「SQLの感覚」があるので、かなり簡単に感じるはずです。

ただし、この質問で見逃している可能性のある重要な点の1つは、テーブルと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 に答える