85 lines
2.6 KiB
PowerShell
85 lines
2.6 KiB
PowerShell
function Invoke-QueryByConnectionString {
|
|
|
|
param (
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$ConnectionString,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$QueryString
|
|
)
|
|
|
|
$logLead = Get-LogLeadName
|
|
$conn = New-Object System.Data.SqlClient.SqlConnection
|
|
|
|
try {
|
|
|
|
$conStrBuilder = New-Object System.Data.SqlClient.SqlConnectionStringBuilder($ConnectionString)
|
|
|
|
} catch [System.Management.Automation.MethodException] {
|
|
|
|
Write-Warning "$logLead : Provided connection string [$ConnectionString] is invalid. Execution cannot continue."
|
|
return $null
|
|
}
|
|
|
|
$conn.ConnectionString = $conStrBuilder.ToString()
|
|
Write-Verbose ("$logLead : Connecting to database with connection string {0}" -f $conStrBuilder.ToString())
|
|
|
|
if (-not (Confirm-DatabaseAccess -ConnectionString $conStrBuilder.ToString())) {
|
|
Write-Error "$logLead : You can not connect to the database server, do you have access and is it online?"
|
|
return
|
|
}
|
|
|
|
$handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {
|
|
param($sender, $event)
|
|
Write-Host $event.Message
|
|
};
|
|
|
|
try {
|
|
|
|
$conn.add_InfoMessage($handler);
|
|
$conn.FireInfoMessageEventOnUserErrors = $true
|
|
|
|
$conn.Open()
|
|
$query = New-Object System.Data.SqlClient.SqlCommand($QueryString, $conn)
|
|
$reader = $query.ExecuteReader()
|
|
|
|
$allResults = New-Object -TypeName "System.Collections.ArrayList"
|
|
do {
|
|
$currentResults = @()
|
|
$columns = @()
|
|
for ($i = 0; $i -lt $reader.FieldCount; $i++) {
|
|
$columns += $reader.GetName($i)
|
|
}
|
|
while ($reader.Read()) {
|
|
$rowResult = @{}
|
|
for ($i = 0; $i -lt $reader.FieldCount; $i++) {
|
|
if ($reader.IsDBNull($i)) {
|
|
$rowResult[$columns[$i]] = $null
|
|
} else {
|
|
$rowResult[$columns[$i]] = $reader[$i]
|
|
}
|
|
}
|
|
$currentResults += $rowResult
|
|
}
|
|
$allResults.Add($currentResults) | Out-Null
|
|
} while ($reader.NextResult())
|
|
|
|
return $allResults
|
|
|
|
} catch {
|
|
|
|
Write-Warning "$logLead : An exception occurred while trying to execute the specified query against the database"
|
|
Write-Warning "$logLead : $($_.ToString())"
|
|
Write-Warning "$logLead : $($_.ScriptStackTrace)"
|
|
return $null
|
|
|
|
} finally {
|
|
|
|
if (($null -ne $conn) -and ($conn.State -ne [System.Data.ConnectionState]::Closed)) {
|
|
|
|
$conn.Close()
|
|
}
|
|
|
|
$conn = $null
|
|
}
|
|
} |