Mit der PowerShell die Oracle Datenbank mit .NET abfragen

Vorbereitung: .Net Objekte auf dem Server installieren

Falls die nicht bereits mit der Installations der Oracle Software erfolgt ist:

Aufruf PowerShell

# DataAcess DLL einbinden
 $AssemblyFile ="d:\oracle\product\11.2.0.3\client_64bit\odp.net\bin\2.x\Oracle.DataAccess.dll"
 
# Connect String mit Angabe TNS Alias
$ConnectionString = "User ID=scott;Password=tiger;Data Source=oraGPI;Persist Security Info=True"
 
# Auszuführendes Kommando 
$SQLCommand = "SELECT * FROM EMP where deptno=10"
 
# DLL laden
[Reflection.Assembly]::LoadFile($AssemblyFile) 
 
# Falls der Fehler auftritt : " ist keine zulässige Win32-Anwendung. (Ausnahme von HRESULT: 0x800700C1)"
# auf richtige bit Variante der DLL Achten (64bit OS => 64bit Oracle Home!)
 
#Verbindung zur Datenbank aufbauen
# Object anlegen
$OracleConnection = New-Object -TypeName Oracle.DataAccess.Client.OracleConnection
# Connect string setzen
$OracleConnection.ConnectionString = $ConnectionString
# Datenbank Verbindung öffnen
$OracleConnection.Open()
 
#SQL Kommando initalisieren
$OracleCommand = New-Object -TypeName Oracle.DataAccess.Client.OracleCommand
$OracleCommand.CommandText = $SQLCommand
$OracleCommand.Connection = $OracleConnection
 
# Adapter laden
$OracleDataAdapter = New-Object -TypeName Oracle.DataAccess.Client.OracleDataAdapter
$OracleDataAdapter.SelectCommand = $OracleCommand
 
#Dataset anlegen
$DataSet = New-Object -TypeName System.Data.DataSet
 
#Dataset mit dem Ergebniss der SQL Abfrage "füllen"
$OracleDataAdapter.Fill($DataSet) 
 
 
#Daten ausgeben
$DataSet.Tables[0]

Alternativ mit Reader abfragen: (siehe auch msdn oracledatareader )

$reader=$OracleCommand.ExecuteReader()
 
# Struktur des Ergebniss Records  anzeigen
for ($i=0;$i -lt $reader.FieldCount;$i++) {
    Write-Host  "Position ::" $i "::" $reader.GetName($i)"::" $reader.GetDataTypeName($i)
}
 
# Ausgeben der Ergebnisse
# auf die richtige Nummerierung achten 
 
while ($reader.read()) {
 
   $empno   = $reader.GetInt32(0) 
 
   # Reader "härten", falls ename null sein sollte
   if ( $reader.IsDBNull(1) ) {
       $ename= ""
   } 
   else {
       $ename  = $reader.GetString(1)
   }         
 
   $hiredate= $reader.GetDateTime(4)
 
    Write-Host "$ename $empno $hiredate"
}
Datenbank Verbindung auch wieder schließen .-)!
#Verbindung wieder schließen
$OracleDataAdapter.Dispose()
$OracleCommand.Dispose()
$OracleConnection.Close()

Quellen:

Oracle .Net DB Beispiele

Objekt Referenzen: