将对象传递给powershell函数

C.E*_*C.E 2 c# powershell powershell-2.0

我正在尝试将SQL适配器对象传递给powershell函数,但我收到此错误:

executeQueryAndFillTable:无法处理参数'da'上的参数转换.无法将"System.Object []"类型的"System.Object []"值转换为"System.Data.SqlClient.SqlDataAdapter"类型.

这是代码

function sql_pull
{
# define Objects
$xmlDoc = New-Object System.Xml.XmlDocument
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection
$sqlCommand = New-Object System.Data.SqlClient.SqlCommand
$sqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$connectionString = "Password=$password;Persist Security Info=True;User ID=$userId;Data Source=$dataSource"
$counter = 0

# database queries 
$queries = @(
"Select * from sys.configurations for xml Raw ('Cretiria'), type, ROOT('sys.configurations'), ELEMENTS");

$sqlConnection.ConnectionString = $connectionString
$sqlCommand.Connection = $sqlConnection

try {

    $sqlConnection.Open()

    foreach($q in $queries) 
    {
        $sqlCommand.CommandText = $q
        $sqlAdapter.SelectCommand = $sqlCommand.CommandText
        $sqlAdapter.SelectCommand.CommandTimeout = 300

        $res = executeQueryAndFillTable($sqlAdapter, $sqlCommand)

    }

    $sqlConnection.Dispose()
    $sqlCommand.Dispose()
    $sqlAdapter.Dispose()
} 
catch
{
    Throw
}

}



function executeQueryAndFillTable
{
param(
    [System.Data.SqlClient.SqlDataAdapter]$da,
    [System.Data.SqlClient.SqlCommand] $command
)

$dataTable = New-Object System.Data.DataTable
$da.SelectCommand = $command
$da.Fill($dataTable)
#check
$data = $dataTable.Rows[0][0]
return $data
}
Run Code Online (Sandbox Code Playgroud)

JPB*_*anc 5

两件事情 :

第一:在PowerShell函数中应该在使用前声明.

第二:调用函数的方式.

executeQueryAndFillTable($sqlAdapter, $sqlCommand)
Run Code Online (Sandbox Code Playgroud)

这不是在PowerShell中调用函数的正确方法.这样PowerShell就会明白你用一个参数来调用函数,这个参数是,两个不同类型元素的数组(非常重要的是PowerShell中的数组运算符)(之所以System.Object[]在eror中).rihgt的方式是:

executeQueryAndFillTable $sqlAdapter $sqlCommand
Run Code Online (Sandbox Code Playgroud)