4

I'm trying to pass a SQL adapter object to a PowerShell function but I'm getting this error:

executeQueryAndFillTable : Cannot process argument transformation on parameter 'da'. Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Data.SqlClient.SqlDataAdapter".

Here's the code

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
}
8
  • 2
    Possible duplicate of Parenthesis Powershell functions Commented Dec 24, 2015 at 12:59
  • $da = New-Object System.Data.SqlClient.SqlDataAdapter ? Commented Dec 24, 2015 at 13:17
  • @JaquelineVanek The issue is how the function is being called. Hence the dupe Commented Dec 24, 2015 at 13:19
  • Please give an example of the full command/pipeline you're using here. Just showing the functions isn't enough for us to pinpoint the problem. Commented Dec 24, 2015 at 14:08
  • @FoxDeploy The problem is right here: executeQueryAndFillTable($sqlAdapter, $sqlCommand) Commented Dec 24, 2015 at 15:13

1 Answer 1

9

Two things:

First : In PowerShell function should be declare before usage.

Second : The way the function is called.

executeQueryAndFillTable($sqlAdapter, $sqlCommand)

This is not the right way to call a function in PowerShell. If you call it this way PowerShell thinks you are calling the function with only one parameter which is an array (very important , is the array operator in PowerShell) of two elements of distinct types (the reason why System.Object[] in the error).

The right way is :

executeQueryAndFillTable $sqlAdapter $sqlCommand
Sign up to request clarification or add additional context in comments.

3 Comments

tnx! that's help a lot!
@C.E Perhaps you can put the question as answered ?
@CE, Please mark this as "The Answer", so it does not keep coming up under unanswered SOF questions.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.