2014-09-24 57 views
0

我有一個很直接的功能斂SQL結果:

function RunSqlCommand($sql) 
{ 
    $connection = $null 
    $command = $null 
    try 
    { 
     $connectionString = "data source=localhost; integrated security=true" 
     $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString) 
     $command = $connection.CreateCommand() 
     $command.CommandText = $sql 
     $adapter = New-Object System.Data.SqlClient.SqlDataAdapter($command) 
     $dataSet = New-Object System.Data.DataSet 
     $adapter.Fill($dataSet) 
     $results = $dataSet.Tables | Select-Object -ExpandProperty "Rows" 
     return $results 
    } 
    finally 
    { 
     if ($command -ne $null) { $command.Dispose() } 
     if ($connection -ne $null) { $connection.Dispose() } 
    } 
} 

每當有沒有效果,$results變量是$null。但是,當我檢查調用方法中的返回值時,它奇蹟般地變爲0

PowerShell在幕後做了些什麼?我真的很想返回$null來表示「沒有結果」。

回答

1

$adapter.Fill()返回數據集中添加或刷新的行數。

要解決,你可以這樣做:

[void]$adapter.Fill($dataSet) 

$adapter.Fill($dataset) | out-null 
+0

所以,即使我明確地返回一個值PowerShell是返回的附加值?當有行要返回時,爲什麼我不能得到0? – 2014-09-24 22:06:41

+0

找到了一個相當不錯的博客解釋此行爲:http://rkeithhill.wordpress.com/2007/09/16/effective-powershell-item-7-understanding-output/ – 2014-09-24 22:39:04

+2

這是PowerShell的一個獨特的行爲,任何「uncaptured 「值被添加到輸出流。 – 2014-09-25 00:37:14