1

.Net コンソール アプリケーションと powershell スクリプトを使用して Oracle.ManagedDataAccess 4.121.1.0 をテストしていますが、私の C# アプリケーションではすべて問題ありません。残念ながら、open メソッドで oracle 接続を開こうとすると、powershel スクリプトに奇妙な問題が発生します。

ここに私のPowershell「スクリプト」

Add-Type -Path 'C:\Oracle\odp.net\managed\common\Oracle.ManagedDataAccess.dll'

$CNX = 'Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY = tcp.world)(PROTOCOL = TCP)(Host = HOST)(Port = 1521)))(CONNECT_DATA=(SID=SID)));User ID=USER;Password=PWD;'
$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("$CNX")
$con.open()

スローされるエラーは

Exception lors de l'appel de « Open » avec « 0 » argument(s): « Impossible de trouver l'asse mbly 'Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429 c47342'. » Au niveau de C:\oracle\oracle.ps1 : 5 Caractère : 10

ac# コンソール アプリケーションで記述された同じコードは正常に動作します。

設定の問題だと思いますが、迷っています...

すでにこの問題を抱えている人はいますか?

どうも

4

3 に答える 3

1

それが役立つかどうかはわかりませんが、PowerShell 3.0で私のために働いているのは次のとおりです

ここODAC1120320Xcopy_x64.zipからreadmeテキストファイルに従ってダウンロードしてインストールします。

これが私のスクリプトです:

# getting good assembly
Add-Type -Path "C:\oracle\odp.net\bin\4\Oracle.DataAccess.dll"

# Connexion string
$compConStr = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.213.6.15)(PORT=3000)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MySERVER)));User Id=toto;Password=toto;"

# Establish connexion
$oraConn= New-Object Oracle.DataAccess.Client.OracleConnection($compConStr)
$oraConn.Open()

を実行するために使用するコードは次のOracle.ManagedDataAccess.dllとおりです。

# Download the package if it's not on the disk    
$version = '12.2.1100'
try
{
  if (! $(Test-Path ".\NugetPackages\Oracle.ManagedDataAccess.$version\lib\net40\Oracle.ManagedDataAccess.dll"))
  {
    $ManagedDataAccess = Install-Package Oracle.ManagedDataAccess -Destination ".\NugetPackages" -Force -Source 'https://www.nuget.org/api/v2' -ProviderName NuGet -RequiredVersion $version -ErrorAction SilentlyContinue
  }
  Add-Type -Path ".\NugetPackages\Oracle.ManagedDataAccess.$version\lib\net40\Oracle.ManagedDataAccess.dll"
}
catch [System.Management.Automation.ParameterBindingException]
{
  $global:OracleError = New-Object PSCustomObject -Property @{"StackTrace"=$_.ScriptStackTrace;"Detail" = "Ligne $($_.InvocationInfo.ScriptLineNumber) : $($_.exception.message)";"TimeStamp"=([datetime]::Now)}
  $log = $null
}

# Connexion
$oraConn= New-Object Oracle.ManagedDataAccess.Client.OracleConnection (($compConStr)
$oraConn.Open()

# Requête SQL
$sql1 = @"
SELECT XX_MYSESSION_ID FROM XX_SILOGIXWSLOG 
  WHERE xx_name='customer_log'
  AND xx_param_4 IS NOT NULL
"@

$command1 = New-Object Oracle.ManagedDataAccess.Client.OracleCommand($sql1,$oraConn)

# Execution
$reader1=$command1.ExecuteReader()

$n = 0
while ($reader1.read())
{
  $reader1["XX_MYSESSION_ID"]  
}

# Close the conexion
$reader1.Close()
$oraConn.Close()
于 2013-08-28T15:09:56.743 に答える
0

2 時間かけて他のアプローチを試した後、接続を文字列として指定すると、ようやくうまくいきました。Powershell 4 を使用しています。

$tns="データ ソース = (DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = myoracle.server.mydomain)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = myoracle.server.mydomain)));ユーザー ID =myid;パスワード=mypass;"

$con = 新しいオブジェクト Oracle.ManagedDataAccess.Client.OracleConnection($tns)

于 2014-07-17T18:00:47.123 に答える