===== 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]]