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

DataSet与DataTable经ReadXml加载后引用行为差异问题

PowerShell中DataSet保存加载后无法通过表名引用的原因及解决办法

这不是Bug,是DataSet XML序列化的默认行为导致的问题——如果保存时未将DataSet的架构信息(包括表名、列定义等)写入XML文件,加载后的DataSet无法识别表的名称,只能通过索引访问表集合中的DataTable。

核心原因

DataSet默认的XmlWriteMode.IgnoreSchema模式只会写入数据,不会保存架构信息。此时XML文件中没有表名的定义,加载后DataSet只能按顺序创建匿名表,自然无法通过表名引用。即便你切换了模式,若保存和加载的模式不匹配,也达不到预期效果。

解决步骤

要恢复通过表名访问的能力,必须保证保存时写入架构,加载时读取架构:

  1. 保存DataSet时指定写入架构
    使用XmlWriteMode.WriteSchema模式,将完整的架构和数据一并写入XML:
# 假设$dataset是已创建好的包含language和replace表的DataSet
$dataset.WriteXml("data.xml", [System.Data.XmlWriteMode]::WriteSchema)
  1. 加载DataSet时指定读取架构
    对应使用XmlReadMode.ReadSchema模式,让DataSet解析XML中的架构信息,恢复表名:
$loadedDataSet = New-Object System.Data.DataSet
$loadedDataSet.ReadXml("data.xml", [System.Data.XmlReadMode]::ReadSchema)

验证

加载完成后,可通过以下命令确认表名是否正确恢复:

$loadedDataSet.Tables["language"] | Select-Object TableName
$loadedDataSet.Tables["replace"] | Select-Object TableName

如果输出显示正确的表名,就可以正常通过名称引用DataTable了。

内容的提问来源于stack exchange,提问作者megahertz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:29:55