首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >返回DataSet/DataTable的PowerShell函数中的奇怪行为

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

Stack Overflow用户
提问于 2009-12-17 06:15:51
回答 3查看 16.8K关注 0票数 23

我都快疯了。我有一个来自多个脚本的库,其中包含以下函数:

代码语言:javascript
复制
function lib_open_dataset([string] $sql) {
    $ds = new-object "System.Data.DataSet"
    $da = new-object "System.Data.SqlClient.SqlDataAdapter" ($sql, $_conn_string)

    $record_count = $da.Fill($ds)

    return $ds
}

这几乎在任何地方都被称为,它工作得很好,除了我通常必须这样做:

代码语言:javascript
复制
$ds = lib_open_dataset($some_sql)
$table = $ds.Tables[0]
foreach ($row in $table.Rows) {
    # etc
}

因此,我创建了一个新的简单包装器函数,以避免取消引用第一个表的额外步骤:

代码语言:javascript
复制
function lib_open_table([string] $sql) {
    $ds = lib_open_dataset $sql
    return $ds.Tables[0]
}

问题是,由于某种原因,从这里返回的是表的行集合,而不是表本身。这会导致如上编写的foreach行循环失败,并显示"Cannot index into a null array“。异常。经过多次尝试和错误,我发现这是可行的:

代码语言:javascript
复制
foreach ($row in $table) {
    # etc
}

注意$table.Rowsforeach语句中的$table之间的区别。此works。因为$table实际上指向行集合。如果语句

代码语言:javascript
复制
return $ds.Tables[0]

假设是正确的,为什么函数返回表对象的子集而不是表本身?

我猜Powershell函数的工作方式中有一些明显的原因,但我不知道是什么原因。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1918190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档