私が見つけた最善の解決策は、Oracle Data Access Clientライブラリを使用し、TNS名のエントリ全体を接続文字列に含めることでした。これにより、プロジェクトをWebサーバーやClickOnceなどに簡単に公開できます。
プロジェクトで動作するOracleドライバを設定するために必要な手順は次のとおりです。
1)「OracleDataProviderfor.NET」パッケージからDLLを取得します
次の場所からインストーラファイルをダウンロードします: http://www.oracle。 com / technetwork / topics / dotnet / index-085163.html
先に進んで、VisualStudio用のOracleDeveloperToolsを使用して200MBのODAC全体をインストールしましたが、実際に必要なのは、このダウンロードから4つのDLLだけです。 (インストールプロセス全体を実行する代わりに、インストーラーパッケージから直接抽出できる場合があります。または、小さなダウンロードの1つにすべてが含まれている場合もあります。)
2)プロジェクト内の参照DLL
Oracle Data Access Clientのインストール・ディレクトリを検索し、次の4つのDLLをプロジェクトのルートにドラッグします。
- Oracle.DataAccess.dll
- oci.dll
- oraciicus11.dll
- OraOps11w.dll
出力ディレクトリにコピーを設定します Oracle.DataAccess.dllを除くすべてのファイルを常にコピーするプロパティ 。
プロジェクトの下 ->参照を追加... 、参照をクリックします タブをクリックして、Oracle.DataAccess.dllファイルを選択します。
3)完全な接続文字列でドライバーを使用します(オプション)
アプリケーションがデプロイされたマシンに設定されているTNS名ファイルについて心配する必要がないように、 connectionstrings.com 。接続文字列が少しかさばりますが、以前に経験したTNSNamesファイルの頭痛の種の多くを取り除きました:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
これが私がドライバーをテストするために使用した完全なクラスです:
using System;
using System.Data;
using Oracle.DataAccess.Client;
static class Program
{
[STAThread]
static void Main()
{
TestOracle();
}
private static void TestOracle()
{
string connString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" +
"(HOST=servername)(PORT=1521)))" +
"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+
"User Id=username;Password=********;";
using (OracleConnection conn = new OracleConnection(connString))
{
string sqlSelect = "SELECT * FROM TEST_TABLE";
using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
{
var table = new DataTable();
da.Fill(table);
if (table.Rows.Count > 1)
Console.WriteLine("Successfully read oracle.");
}
}
}
}