PowerShell函数在SQL无记录时始终返回0问题求助
PowerShell Select-SQLRecords 函数无记录返回0而非空字符串的解决办法
问题根源:
$SqlAdapter.Fill($dataSet)方法本身会返回填充到DataSet的行数,无记录时返回0。而PowerShell函数默认会收集执行过程中所有未被捕获的输出作为返回结果,哪怕你后续写了return "",Fill的返回值已经先被输出到管道,最终函数返回的就是这个0。两种快速解决方式:
- 将Fill的返回值捕获到变量中,阻止其输出:
$rowsAffected = $SqlAdapter.Fill($dataSet) - 直接将Fill的输出重定向到Null:
$SqlAdapter.Fill($dataSet) | Out-Null
- 将Fill的返回值捕获到变量中,阻止其输出:
修正后的函数示例:
function Select-SQLRecords { # 省略数据库连接、Command创建等前置代码 $dataSet = New-Object System.Data.DataSet # 捕获Fill返回值,避免输出到管道 $rowsAffected = $SqlAdapter.Fill($dataSet) if ($dataSet.Tables[0].Rows.Count -gt 0) { return $dataSet.Tables[0].Rows } # 无记录时返回空字符串 return "" }
这样修改后,当查询无记录时,函数就会返回你指定的空字符串,而非Fill方法的返回值0。
内容的提问来源于stack exchange,提问作者Conax
相关产品推荐
相关产品推荐

