2016-04-07 11 views
0

ich folgende Power Shell-Code von einem Host zu einer HANA-Instanz verbinden bin mit dem HANA-Client installiert ist -Anbindung von SAP HANA DB von Power

function Get-OLEDBData ($connectstring, $sql) { 
    $OLEDBConn = New-Object System.Data.OleDb.OleDbConnection($connectstring) 
    $OLEDBConn.open() 
    $readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$OLEDBConn) 
    $readcmd.CommandTimeout = '300' 
    $da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd) 
    $dt = New-Object system.Data.datatable 
    [void]$da.fill($dt) 
    $OLEDBConn.close() 
    return $dt 
    } 

    $hdbSqlCmd = "myquery" 
    $hdbConnectionString = "Driver={HDBODBC};ServerNode=myserver:30015;UID=myuser;PWD=mypasswd;" 
    Get-OLEDBData $hdbConnectionString $hdbSqlCmd** 

aber ich bekomme folgende Fehler -

New-Object : Exception calling ".ctor" with "1" argument(s): "An OLE DB Provider was not specified in the ConnectionString. An example would be, 'Provider=SQLOLEDB;'." 
    At C:\myspace\hana_connect_1.ps1:5 char:27+ $OLEDBConn = New-Object <<<< System.Data.OleDb.OleDbConnection($connectstring) 
+ CategoryInfo   : InvalidOperation: (:) [New-Object],  MethodInvocationException 
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand 

Wenn ich die Verbindungszeichenfolge Provider ändern statt Driver -

$hdbConnectionString = "Provider={HDBODBC};ServerNode=myserver:30015;UID=myuser;PWD=mypasswd;" 

ich unten Fehlermeldung erhalten -

Exception calling "Open" with "0" argument(s): "The '{HDBODBC}' provider is not registered on the local machine." 
    At C:\myspace\hana_connect_1.ps1:6 char:19 
    + $OLEDBConn.open <<<<() 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException 

Der Fehler bleibt gleich, auch wenn ich auf 32-Bit-Treiber ändern - HDBODBC32, sagen HDBODBC32 ist nicht registriert.

Ich bin jetzt verloren, jede Hilfe jemand !!

+0

Sie könnten versuchen, eine '* .udl' Datei zu erstellen. Zum Beispiel 'test.udl'. Öffnen Sie die Datei, und versuchen Sie, die Verbindungszeichenfolge dort einzufügen, um das Skript zu überprüfen. –

+0

Hallo, danke aber die Datenverbindung enthält kein HDBODBC als Treiber. Es enthält den SAP Hana MDX Provider, der nicht für die Art von Abfragen verwendet werden kann, die ich ausführen möchte. – ace

Antwort

0

Der SAP-HANA-ODBC-Treiber ist nicht ein OLEDB-Treiber. Deshalb müssen Sie stattdessen den ODBC-API verwenden:

function Get-ODBCBData ($connectstring, $sql) { 
    $Conn = New-Object System.Data.odbc.ODBCconnection($connectstring) 
    $Conn.open() 
    $readcmd = New-Object system.Data.odbc.ODBCCommand($sql,$Conn) 
    $readcmd.CommandTimeout = '300' 
    ... 
    $hdbConnectionString = "Driver={HDBODBC};ServerNode=myserver:30015;UID=myuser;PWD=mypasswd;" 
    Get-ODBCBData $hdbConnectionString $hdbSqlCmd** 

funktionieren soll.

+0

Hallo, es funktioniert .. danke für die Idee !! – ace