Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

powershell:sqlabfragenpowershell

SQL-Abfragen in Powershell

$a = "Datenbank-ConnectionString"
$b = "SELECT abc FROM T_Table WHERE id = 1"
 
function SQLQUERY ([string]$targetConnectionString, [string]$targetQuery)
{
	$dt = New-Object System.Data.DataTable
	$SQL = New-Object System.Data.SqlClient.SqlDataAdapter
	$SqlConn = New-Object System.Data.SqlClient.SqlConnection
	$query = New-Object System.Data.SqlClient.SqlCommand
 
	$SQLConn.ConnectionString = $targetConnectionString
 
	$query.CommandType.Text
	$query.CommandText = $targetQuery
	$query.Connection = $SqlConn
 
	$SqlConn.Open()
	$SQL.SelectCommand = $query
	$SQL.FillSchema($dt, 1)
	$tmp1 = $SQL.Fill($dt)
	$SQLConn.Close();
 
	return ($dt)
}
 
function GetDataField([System.Data.DataTable]$dt, [int]$row, [string]$DataField)
{
	$returnvalue = ""
	Try
	{
		$returnvalue = $dt.Rows[$row][$DataField].toString()
	} Catch [System.Exception]
	{
		$returnvalue = ""
	}
	return($returnvalue)
}
 
$hello = SQLQUERY $a $b
$out = GetDataField $hello 0 "abc"

Die erste Funktion macht ein Query auf eine Datenbank und gibt eine DataTable zurück, die mit GetDataField abgefragt werden kann.

Infos zu dem Objekt DataTable: https://msdn.microsoft.com/de-de/library/System.Data.DataTable(v=VS.110).aspx

Ich habe festgestellt, dass gar kein DataTable zurück gegeben wird, sondern nur ein Array von DataRows. Auch ist es möglich, dass sich der fragliche Wert nicht im ersten Objekt befindet, sondern erst im zweiten. Der Aufruf sähe dann so aus: $out = $hello[1]["abc"]

powershell/sqlabfragenpowershell.txt · Zuletzt geändert: 2016/04/02 00:49 (Externe Bearbeitung)