2016-04-07 8 views
0
私はHANAクライアントがインストールされているホストからHANAインスタンスに接続するには、次のパワーシェルコードを使用しています

からSAP HANA DBの接続 -PowerShellの

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** 

しかし、私は、次の取得エラー -

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 
私は、エラーの下に取得

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

-

は私ではなく、ドライバーのプロバイダに接続文字列を変更した場合 -

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 
32ビットドライバ - HDBODBC32に変更しても、HDBODBC32が登録されていないと言ってもエラーは同じです。

私は今失われています、誰か助けてください!

+0

'* .udl'ファイルの作成を試みることができます。例えば、 'test.udl'です。ファイルを開き、そこに接続文字列を挿入して、スクリプトの問題ではないことを検証します。 –

+0

こんにちは、ありがとうございますが、データリンクにはドライバとしてHDBODBCが含まれていません。これには、実行するクエリの種類に使用できないSAP Hana MDX Providerが含まれています。 – ace

答えて

0

SAP HANA ODBCドライバはで、OLEDBドライバはではありません。 したがって、代わりにODBC APIを使用する必要があります。

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** 

が動作するはずです。

+0

こんにちは、それは働く..考えてくれてありがとう! – ace