当前位置:  开发笔记 > Android > 正文

在PowerShell中加载序列化的DataTable - 返回DataRows数组而不是DataTable

如何解决《在PowerShell中加载序列化的DataTable-返回DataRows数组而不是DataTable》经验,为你挑选了1个好方法。

我正在尝试在PowerShell中保存和加载DataTable.我这样保存:

$dt | Export-CliXml -path "c:\exports\data.xml"

并加载它像这样:

$dt = Import-CliXml -path "c:\exports\data.xml"

但我得到的类型是一行Rows而不是DataTable!这导致了我的主要问题,因为它需要传递给需要DataTable的函数,并且它不能被转换为一个.

任何帮助非常感谢,谢谢.



1> Roman Kuzmin..:

这是一个已知的陷阱:PowerShell将您处理DataTableDataRow项目集合.这是第一个命令

$dt | Export-CliXml -path "c:\exports\data.xml"

已经"忘记"了数据表.您可以查看输出文件,它以DataRow:


  
    
      System.Data.DataRow

要避免这种影响,请使用,运算符(看起来很有趣,但这正是它的工作原理):

, $dt | Export-CliXml -path "c:\exports\data.xml"

因此,输出文件现在以DataTable:


  
    
      System.Data.DataTable

之后,您可以导入表格:

$dt = Import-CliXml -path "c:\exports\data.xml"

我们来检查一下:

$dt | Get-Member
# output:
TypeName: Deserialized.System.Data.DataRow
…

我们可以看到相同的效果(DataRow而不是DataTable).因此,正确的命令是,:

, $dt | Get-Member
# output:
TypeName: Deserialized.System.Data.DataTable
…

所以,我们真的DataTable以这种方式脱水.

===

编辑:此效果称为展开.PowerShell倾向于展开集合.逗号运算符创建单个项的数组.PowerShell也会展开此数组,但它不会展开其项目(我们的DataTable).

这是一个非常相似的问题:

PowerShell函数中的奇怪行为返回DataSet/DataTable

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有