Private/Powershell/PsDbUtil.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<############################################################################
 # Get connection to MSSQL database
 ############################################################################>

Function Get-DbConnection($connStr) {

    # Open SQL connection (you have to change these variables)
    $conn = New-Object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = $connStr
    $conn.Open()

    # Quit if the SQL connection did not open properly.
    if ($conn.State -ne [Data.ConnectionState]::Open) {
        "Connection to DB is not open."
        Exit
    }
    return $conn
}

<############################################################################
 # Close SQL connection
 ############################################################################>

Function Close-DbConnection($conn) {
    # Close the connection.
    try {
        if ($conn.State -eq [Data.ConnectionState]::Open) {
            $conn.Close()
        }
    } catch {
        # ignore
    }
}

<############################################################################
 # Execute a sql statement. Parameters are allowed.
 # Input parameters should be a dictionary of parameter names and values.
 # Return value will usually be a list of datarows.
 # https://powershellstation.com/2009/09/15/executing-sql-the-right-way-in-powershell/
 ############################################################################>

Function Invoke-DbQuery ([Data.SqlClient.SqlConnection] $conn, [string]$sql, $parameters=@{}) {
    [OutputType([System.Data.DataTable])]

    $ds=New-Object system.Data.DataSet

    try {
        $cmd = new-object system.Data.SqlClient.SqlCommand
        $cmd.Connection = $conn
        $cmd.CommandText = $sql
        foreach($p in $parameters.Keys){
            [Void] $cmd.Parameters.AddWithValue("@$p",$parameters[$p])
        }
        $da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
        $da.fill($ds) | Out-Null
        $success = $TRUE;
    } catch {
        $error = "error in sql $sql $_"
    }

    return $ds;
}