18

I am calling a function to query an SQL table. I only need the results of one cell. I am unable to successfully retrieve the cell data into a variable from the function.

For example, If I had a table with the following:

    FeedID    Name    Address
    15        Bill    Jones

I would need to capture the FeedID value of '15' into a variable. My SQL statement is only capturing the FeedID but I don't know how to extract the value

Here is what I have so far:

    function Invoke-SQL {
    param(
    [string] $dataSource = "10.0.100.1",
    [string] $database = "Database123",
    [string] $sqlCommand = $("SELECT [FeedID] FROM [dbo].[FeedList] WHERE [FeedFileName] = 'filename.txt'")
    )

    $connectionString = "Data Source=$dataSource; " + "Integrated Security=SSPI; " + "Initial Catalog=$database"
    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $connection.Open()

    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    write-output $adapter.Fill($dataSet) | Out-Null

    $connection.Close()
    $dataSet.Tables
    }

    $FeedID = Invoke-SQL
    $FeedID
2
  • What's is the content of $FeedID after the execution? Commented Mar 28, 2014 at 13:56
  • FeedID and the number 15 Commented Mar 28, 2014 at 14:38

2 Answers 2

22

Alternatively you could use the following code, if you are looking for simple return values rather than tables for processing later.

[string] $Server= "10.0.100.1",
[string] $Database = "Database123",
[string] $SQLQuery= $("SELECT [FeedID] FROM [dbo].[FeedList] WHERE [FeedFileName] = 'filename.txt'")

function GenericSqlQuery ($Server, $Database, $SQLQuery) {
    $Connection = New-Object System.Data.SQLClient.SQLConnection
    $Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=true;"
    $Connection.Open()
    $Command = New-Object System.Data.SQLClient.SQLCommand
    $Command.Connection = $Connection
    $Command.CommandText = $SQLQuery
    $Reader = $Command.ExecuteReader()
    while ($Reader.Read()) {
         $Reader.GetValue(0)
    }
    $Connection.Close()
}
Sign up to request clarification or add additional context in comments.

1 Comment

This only works because $1 is undefined and is taken as 0 when used in $Reader.GetValue($1)
13

It looks like $FeedID (the variable you put the SQL output in) should have a FeedID property (from the single row returned).

Try this:

$FeedID.FeedID

2 Comments

This is so much simpler and more idiomatic than the accepted answer.
This answer is awesome because it actually answers the question. Less is more. Another upvote for you.

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.