DataSet与DataTable经ReadXml加载后引用行为差异问题
PowerShell中DataSet保存加载后无法通过表名引用的原因及解决办法
这不是Bug,是DataSet XML序列化的默认行为导致的问题——如果保存时未将DataSet的架构信息(包括表名、列定义等)写入XML文件,加载后的DataSet无法识别表的名称,只能通过索引访问表集合中的DataTable。
核心原因
DataSet默认的XmlWriteMode.IgnoreSchema模式只会写入数据,不会保存架构信息。此时XML文件中没有表名的定义,加载后DataSet只能按顺序创建匿名表,自然无法通过表名引用。即便你切换了模式,若保存和加载的模式不匹配,也达不到预期效果。
解决步骤
要恢复通过表名访问的能力,必须保证保存时写入架构,加载时读取架构:
- 保存DataSet时指定写入架构
使用XmlWriteMode.WriteSchema模式,将完整的架构和数据一并写入XML:
# 假设$dataset是已创建好的包含language和replace表的DataSet $dataset.WriteXml("data.xml", [System.Data.XmlWriteMode]::WriteSchema)
- 加载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
相关产品推荐
相关产品推荐

