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.
相关产品推荐
相关产品推荐

