===== 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:\\
* Download Software 32 Bit unter [[http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html | 32bit ODAC 11.2 Release 4 (11.2.0.3.0) XCopy version ]]
* oder
* Download Software ODAC112030Xcopy_x64.zip - 64 Bit unter [[http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html | 64bit ODAC 11.2 Release 4 (11.2.0.3.0) XCopy version ]]
* Software entpacken
* Software installieren z.B. die 64bit variante unter d:\oracle\product\11.2.0.3\client_64bit
* Adinistrative Powershell Console öffnen und in das entpackte Verzeichnis wechseln
* Aufruf .\install.bat .\install.bat all D:\oracle\product\11.2.0.3\client_64bit ora_client_64bit
* Die Software wird kopiert
* TNSAdmin.ora auf gewünschte DB einrichten (empfohlen: Speicherort tnsnames.ora über die TNS_ADMIN Variable definieren!)
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 [[http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledatareader| 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:
* [[http://orcasoracle.squarespace.com/oracle-rdbms/2010/1/18/access-oracle-database-with-windows-powershell-20.html]]
* [[http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/2fc345f8-4598-4703-971f-a2537f39a3bb/]]
* [[http://guyharrison.typepad.com/yadb/2008/01/accessing-oracl.html]]
* [[http://www.geoffhudik.com/tech/2010/7/15/oracle-powershell-cmdlet.html]]
Oracle .Net DB Beispiele
* [[http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/hol08/dotnet/getstarted-c/getstarted_c_otn.htm]]
Objekt Referenzen:
* [[http://msdn.microsoft.com/de-de/library/gg145028| .Net 4.0 System.Data-Namespaces Überblick]]