在 PowerShell 中加载序列化的 DataTable - 返回 DataRows 数组而不是 DataTable
我正在尝试在 PowerShell 中保存和加载数据表。 我像这样保存它:
$dt | Export-CliXml -path "c:\exports\data.xml"
并像这样加载它:
$dt = Import-CliXml -path "c:\exports\data.xml"
但我返回的类型是行数组而不是数据表! 这给我带来了重大问题,因为它需要传递到需要 DataTable 的函数中,并且不能将其转换为 DataTable。
非常感谢任何帮助,谢谢。
I'm trying to save and load a DataTable in PowerShell.
I save it like this:
$dt | Export-CliXml -path "c:\exports\data.xml"
and load it like this:
$dt = Import-CliXml -path "c:\exports\data.xml"
But the type I get back is an array of Rows rather than a DataTable!
This is causing me major problems as it needs to be passed into a function which requires a DataTable, and it cannot be cast to one.
Any help greatly appreciated, thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个已知的陷阱:PowerShell 将
DataTable
处理为DataRow
项的集合。这是第一个命令已经“忘记”了数据表。您可以看一下输出文件,它以
DataRow
开头:要避免这种效果,请使用
,
运算符(它看起来很有趣,但这正是它的工作原理):结果,输出文件现在以
DataTable
开头:之后您可以将表导入回来:
让我们检查一下:
我们可以看到相同的效果(
DataRow
而不是 <代码>数据表)。因此,正确的命令是,
:因此,我们确实以这种方式对
DataTable
进行脱水。===
编辑:此效果称为展开。 PowerShell 倾向于展开集合。逗号运算符创建单个项目的数组。 PowerShell 也展开此数组,但它不会展开其项目(我们的
DataTable
)。这是一个非常相似的问题:
PowerShell 函数返回 DataSet/DataTable 中的奇怪行为
This is a known trap: PowerShell processes your
DataTable
as a collection ofDataRow
items. That is the very first commandalready “forgets” the data table. You may take a look at the output file, it starts with
DataRow
:To avoid this effect, use the
,
operator (it looks funny but that’s exactly how it works):As a result, the output file now starts with
DataTable
:After that you can import the table back:
Let’s check it:
We can see the same effect (
DataRow
instead ofDataTable
). Thus, the correct command is with,
:So, we really dehydrate a
DataTable
in this way.===
EDIT: This effect is known as unrolling. PowerShell tends to unroll collections. The comma operator creates an array of a single item. PowerShell unrolls this array, too, but it does not unroll its items (our
DataTable
).Here is a very similar question:
Strange behavior in PowerShell function returning DataSet/DataTable