2015-12-24 6 views
0

Я пытаюсь передать SQL объект адаптера с функцией Powershell, но я получаю эту ошибку:передача объектов в Powershell функции

executeQueryAndFillTable : Cannot process argument transformation on parameter 'da'. Cannot convert the "System.Object[]" value of type "System.Object[]" to type "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 
} 
+2

Возможный дубликат [функции Скобки Powershell] (http://stackoverflow.com/questions/11060833/parenthesis-powershell-functions) – PetSerAl

+0

$ да = New-Object System.Data.SqlClient .SqlDataAdapter? –

+0

@JaquelineVanek Проблема в том, как вызывается функция. Следовательно, обман – Matt

ответ

4

две вещи:

Первый: Функция PowerShell должна быть объявлена ​​перед использованием.

Второй: Способ вызова функции.

executeQueryAndFillTable($sqlAdapter, $sqlCommand) 

Это неправильный способ вызова функции в PowerShell. Таким образом, PowerShell понимает, что вы вызываете функцию с одним параметром, который является массивом (очень важный , - это оператор массива в PowerShell) из двух элементов разных типов (причина, почему System.Object[] в eror). Rihgt путь:

executeQueryAndFillTable $sqlAdapter $sqlCommand 
+0

tnx! это очень помогает! –

+0

@ C.E Возможно, вы можете задать вопрос как ответ? – JPBlanc

+0

@CE, Пожалуйста, отметьте это как «Ответ», поэтому он не будет подниматься под неотвеченными вопросами SOF. – granadaCoder