在PowerShell中我有这个功能: 函数RunSQLServerQuery { param( [string] $ server =“。”, [string] $ instance = $(抛出“数据库名称是必需的”), [字符串] $查询, $参数= @ {} )
$connection = new-object system.data.sqlclient.sqlconnection( `
“Data Source=$server;Initial Catalog=$instance;Integrated Security=TRUE;”);
$connection.Open
$cmd=new-object system.Data.SqlClient.SqlCommand($query,$connection)
foreach($p in $parameters.Keys)
{
[Void] $cmd.Parameters.AddWithValue("@$p",$parameters[$p])
}
$dt=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
$da.fill($dt) | Out-Null
return $dt.Tables[0]
}
当我这样称呼时:
$ MyTest =“选择GetDate()”
$ rows = RunSQLServerQuery“servername”“master”$ MyTest @ {}
$行
我得到以下结果:
MemberType:方法
OverloadDefinitions:{System.Void Open()}
TypeNameOfValue:System.Management.Automation.PSMethod
值:System.Void Open()
名称:打开
IsInstance:真实的
第1栏:2011年7月19日下午2:14:13
当我在退出函数之前检查$ dt.Tables [0]的值时,值是预期的:
Column1 -------
7/19/2011 2:16:13 PM
我无法弄清楚为什么会这样。我已经尝试将返回切换为 return,$ dt.Tables [0] ,但这无济于事。我无法弄清楚为什么PowerShell在从函数返回时添加此文本。我必须要有一些容易的东西。
Boezo
答案 0 :(得分:2)
问题在于行$connection.open
应该阅读[void]$connection.open()
您将open方法作为输出的一部分而不是调用它。