web-dev-qa-db-ja.com

コンポーネント全体をユーザーにインストールせずに、ODACを使用する.NETアプリケーションをデプロイするにはどうすればよいですか?

Oracle 10gデータベースに接続するC#アプリケーションを作成しました。 Oracle Data Access Component 11.2「ODAC」を使用すると、私のマシンで完全に動作します。

次に、アプリケーションをデプロイして、.NET Frameworkのみを備えた別の「クリーンマシン」にインストールしたいと思います。そして、ODACコンポーネント全体をユーザーにインストールしたくありません。

どうすればできますか?次のように、必要なすべてのDLLファイルをbinフォルダに含めようとしました。

  • oci.dll
  • ociw32.dll
  • Oracle.DataAccess.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • msvcr71.dll

しかし、それでもうまくいきませんでした。この問題を解決するにはどうすればよいですか?

24
3oon

最大50 MBのODACのインストールに加えてOracleクライアントをインストールする必要があるのか​​、スタンドアロンのODACだけをインストールする必要があるのか​​、私にはわかりません。

OracleクライアントとODACをインストールする必要がある場合は、 Oracle Instant Client ?を使用できます。これは、Oracleクライアントをインストールするための最小のフットプリント方式です。 ODAC xcopyサプリメントも必要です。

あなたの懸念がODACのインストールだけである場合、私は利用可能なより小さなフットプリントがあるとは思いません。

9
Justin Cave

Oracleクライアントを個別にインストールする必要はありません。 .exeと同じディレクトリに以下をインストールしました。

   Oracle.DataAccess.dll

   oci.dll 

   OraOps11w.dll

   oraociei11.dll

   msvcr71.dll 

プロジェクトが、提供しているものと同じOracle.DataAccess.dllを参照していることを確認してください。これは、Oracleクライアントがインストールされていなかった新しいPCで動作しました。

このような接続文字列を指定することで、TNSNAMES.oraの使用を避けました

connectionstring = Data Source = "(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(Host =)(PORT =)))" + "(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =)))" "

TNSNAMES.oraを使用している場合は、接続の詳細を1行の文字列にカットアンドペーストするだけです。

参照 C#をOracleデータベースに接続するために必要な最小クライアントフットプリントは何ですか?

詳細については。

  • ejm

上記のdllを取得する方法については、次のチュートリアルを参照してください。 http://begeeben.wordpress.com/2012/08/01/accessing-Oracle-database-without-installing-Oracle-client/ =

27
ejm

この質問が投稿されたため、Oracle Managed Clientが利用可能になりました(Oracle提供)。問題なく使用しています。 DLLや特別な構成を探す必要はありません。パッケージを追加し、構成ファイルを変更するだけで準備完了です。 NuGet Link および 記事 それについてのOracleによる。

このクライアントは完全に.NETマネージコードで記述されているため、アーキテクチャに依存せず、外部DLLやOracleクライアントのインストールなどは必要ありません。

パッケージマネージャーを使用してVSにインストールできます。

Install-Package Oracle.ManagedDataAccess

これをmachine.configファイルに配置しました(web.configまたはapp.configでも機能します)。これにより、インストールされている他のドライバーとの競合を回避できることがわかりました。

<configuration>
    <system.data>
        <DbProviderFactories>
          <remove invariant="Oracle.DataAccess.Client" />
          <remove invariant="Oracle.ManagedDataAccess.Client" />
          <add name="ODP.NET, Managed Driver"
               invariant="Oracle.ManagedDataAccess.Client"
               description="Oracle Data Provider for .NET, Managed Driver"
               type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
        </DbProviderFactories>
      </system.data>
<configuration>

次に、接続文字列について:

 <add name="MyConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=IPORNAMEOFHOST)(PORT=PORTNUM)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLESID)));User Id=ORACLEUSER;Password=ORACLEPASSWORD;" providerName="Oracle.ManagedDataAccess.Client"/>
  • IPORNAMEOFHOST =これは、サーバーのIPアドレスまたはDNS名です。
  • PORTNUM =これは、Oracleが待機しているポート番号です。通常1521。
  • ORACLESID =接続しようとしているデータベースのSID。
  • ORACLEUSER =接続に使用するユーザー名。
  • ORACLEPASSWORD =接続に使用するパスワード。
13
mason