kallewirsch
Goto Top

Powershell + DB-Abfrage + Result

Hallo,

ich versuche mit Powershell eine Oracle-Tabelle abzufragen.
Genutzt wird die durch die Oracle-Client-Installation installierten dlls, also Oracle:data.Access.dll

Die Connectierung zur DB ist erfolgreich, auch meine Abfrage stimmt. Es ist ein einfaches select count(*) from tbljob.

in meinem Konstruct bekomme ich immer eine 1 zurückgeliefert. Mir ist völlig klar, dass dies nicht das _Ergebnis aus count(*) ist, sondern die Anzahl der zurückgelieferten Ergebniszeilen.

Meine Frage ist nun:

Wie kann ich auf das Ergebnis zugreifen?

Vielen Dank für Eure Unterstützung.

Content-Key: 419233

Url: https://administrator.de/contentid/419233

Printed on: April 19, 2024 at 19:04 o'clock

Member: Kraemer
Kraemer Feb 18, 2019 at 15:59:46 (UTC)
Goto Top
Moin,

da du nichts darüber schreibst, wie dein Code aussieht, bleibt nur der Tipp: Jag es mal durch get-member https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Gruß
Member: kallewirsch
kallewirsch Feb 18, 2019 at 16:15:09 (UTC)
Goto Top
Hallo,

ich hatte eben den Code vergessen, hier kommt er:

clear-host
$res_array=0

$odpAssemblyName = "Oracle.DataAccess, Version=2.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"   
[System.Reflection.Assembly]::Load($odpAssemblyName) 
 
$conn = New-Object Oracle.DataAccess.Client.OracleConnection

#Function to Open connection to oracle DB

function Connect-Oracle{
        [CmdletBinding()]
        param(
            [string] $connectionString = $(throw "connectionString is required")  
        )
   
$conn= New-Object Oracle.DataAccess.Client.OracleConnection($connectionString)
$conn.Open()
Write-Output $conn
}


#Create connection string with database settings


function Get-ConnectionString{
        [CmdletBinding()]
        param(
            [string]$user = "dbuser",  
            [string]$pass = "dbpw",  
            [string]$hostName = "meindbserver",  
            [string]$port = "1521",  
            [string]$sid = "test"  
        )
$dataSource = ("(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST={0})(PORT={1}))(CONNECT_DATA=(SERVICE_NAME={2})))" -f $hostName, $port, $sid)  
Write-Output ("Data Source={0};User Id={1};Password={2}" -f $dataSource, $user, $pass)  
}


# Starts the connection
$conn = Connect-Oracle (Get-ConnectionString) 

# Get connection state and Server version
"Connection state is {0}, Server Version is {1}" -f $conn.State, $conn.ServerVersion  


function Get-DataTable{
        [CmdletBinding()]
        Param(
            [Parameter(Mandatory=$true)]
            [Oracle.DataAccess.Client.OracleConnection]$conn,
            [Parameter(Mandatory=$true)]
            [string]$sql
        )
$cmd = New-Object Oracle.DataAccess.Client.OracleCommand($sql,$conn)
$da = New-Object Oracle.DataAccess.Client.OracleDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
[void]$da.Fill($dt)
return ,$dt
}

#SQL query

$SQLquery = "select count(*) from  sysadm.tbljob"  

#Executes query

$dt = Get-DataTable $conn $SQLquery

#Counts returned rows
Write-Host "Retrieved records:"  $dt.Rows.Count -ForegroundColor Yellow           

#Terminates the connection
$conn.Close()

# Returns connection state
"Connection state is {0}" -f $conn.State  
Mitglied: 138810
Solution 138810 Feb 18, 2019 updated at 16:29:02 (UTC)
Goto Top
Wie kann ich auf das Ergebnis zugreifen?
Simple Datatable
$dt.Rows
Liefert dir ein Array aus DataRow-Objekten in dem du auf die Spalten des Ergebnisses zugreifen kannst.
$dt.Rows | %{
    $_.SpalteXY
}

Und wie man weiß nutzt PS die .NET Klassen somit auch alle Eigenschaften dieser. Also den an den Speck und lesen.
Member: kallewirsch
kallewirsch Feb 18, 2019 at 16:31:34 (UTC)
Goto Top
@138810:

Danke für Deine schnelle RÜ, aber ich seh den Wald vor lauter Bäumen nicht mehr.

Hast einen genaueren Tip?
Besten Dank
Mitglied: 138810
138810 Feb 18, 2019 updated at 20:40:39 (UTC)
Goto Top
Wie bitte?? Also noch genauer geht fast nicht und oben steht es frei Haus. Belese dich zur Datatable und es gibt nichts hinzuzufügen!
Member: kallewirsch
kallewirsch Feb 18, 2019 at 20:55:01 (UTC)
Goto Top
@138810:
Danke für Deine Unterstützung. Ich bin nun wirklich kein copy'paster! Fehler geschehen und Deine Lösung hatte ich nur halb auf dem Handy display gelesen und somit war sie nicht komplett sichtbar.
Danke für Deine Vorverurteilung.

Beste Grüße
Kallewirsch
Mitglied: 138810
138810 Feb 18, 2019 updated at 21:28:35 (UTC)
Goto Top
Handy display
Dann ein Touchpaster face-big-smile
Ich bin nun wirklich kein copy'paster!
Naja woher sollst du den Code oben sonst haben wenn du dir diese simple Antwort nicht selbst beantworten kannst, selbst geschrieben bestimmt nicht, denn dann hätte sich diese Frage nie gestellt.