いくつかのマシンで発生している問題のトラブルシューティングに使用する非常に単純なアプリケーションを開発していますが、そこまで到達する前に、CPU アーキテクチャの違いや Oracle データベース ライブラリなど、いくつかの問題に遭遇しました。
にリストされているデータベース サーバーをディレクトリtnsnames.ora
に配置しています。C:\oracle\11g\network\admin
このサーバーを tnsping すると、目的の応答が得られます。Oracle.DataAccess.Client を使用して次のコードでこのサーバーに接続するように C# プログラムをコーディングすると、動作します。
string connectionString = "Data Source=DSDSDS;User Id=UNUNUN;Password=PWPWPW;";
DataTable dataTable = new DataTable();
using (var connection = new OracleConnection(connectionString)) {
connection.Open();
using (var command = new OracleCommand()) {
command.Connection = connection;
command.CommandText = sql;
command.CommandType = CommandType.Text;
using (var oda = new OracleDataAdapter(command)) {
oda.Fill(dataTable);
}
}
}
ただし、Oracle.DataAccess は、それが実行されるシステムのアーキテクチャに依存しています。アーキテクチャに依存しない別のライブラリ Oracle.ManagedDataAccess があることがわかりました。このライブラリを使用すると、サーバーに接続できなくなります。アンORA-12545: Network Transport: Unable to resolve connect hostname
が投げられます。
これはなぜですか?これら 2 つのライブラリの違いは、これまで読んだ内容に基づいているため、これは問題ではないはずです。
追加情報:
- %ORACLE_HOME% と %TNS_ADMIN% は定義されていません (tnsping と Oracle.DataAccess が機能することに注意してください)。
- PATH が
C:\oracle\11g\BIN
定義されています。 tnsnames.ora
私のマシンにはファイルが1つしかありません
tnsnames.ora を .exe ファイルと同じ場所に移動すると、機能します。Oracle.DataAccess はディレクトリ内の tnsnames.ora を検出C:\oracle\11g\network\admin
できるのに、Oracle.ManagedAccess は検出できないのはなぜですか?