You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#遍历DataSet/DataTable生成单记录XML文件内容异常问题

问题原因分析

你遇到的问题核心在于调用了整个DataTable的WriteXml()方法,而不是只输出当前行的数据。row.Table指向的是包含所有5条记录的原DataTable,所以每次循环都会把全表内容写入文件,自然每个XML里都有全部记录。

解决方案:为每行创建独立的DataTable

要实现每条记录对应一个独立XML,你需要为循环中的每一行单独创建一个仅包含该行的DataTable,再写入文件。具体步骤如下:

  • 用dt.Clone()复制原表的结构(不包含数据),得到一个空的新表
  • 将当前循环的行导入这个新表
  • 调用新表的WriteXml()生成文件
修改后的完整代码
SqlDataAdapter da = new SqlDataAdapter("select top 5 * from dbo.Log", con);
DataTable dt = new DataTable("Log");
da.Fill(dt);

foreach (DataRow row in dt.Rows)
{
    // 复制原表结构,创建空表
    DataTable singleRowTable = dt.Clone();
    // 将当前行导入新表
    singleRowTable.ImportRow(row);
    // 写入XML文件(注意这里要替换成你的实际路径,比如 @"C:\Logs\" + ...)
    singleRowTable.WriteXml(@"C:\YourTargetPath\" + row["id"] + ".xml");
    // 其他业务代码...
}
额外注意点
  • 原代码里的路径":\" + row["id"] + ".xml"是无效的,记得替换成实际的本地路径(比如@"D:\Output\"),避免出现文件路径错误
  • 如果不需要保留原表的结构定义(比如XML里的xs:schema部分),可以在WriteXml时传入XmlWriteMode.IgnoreSchema参数,示例:
    singleRowTable.WriteXml(@"C:\YourTargetPath\" + row["id"] + ".xml", XmlWriteMode.IgnoreSchema);
    

内容的提问来源于stack exchange,提问作者Fabio V.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:38