Я разрабатываю очень простое приложение, которое я намерен использовать для устранения проблемы, имеющейся у меня на нескольких машинах, но до того, как я дошел до этого, я столкнулся с несколькими проблемами, включая различия в архитектуре процессора и библиотеками баз данных Oracle.
У меня есть сервер базы данных, указанный в tnsnames.ora
, сидящий в моем каталоге C:\oracle\11g\network\admin
. Если я набрал этот сервер, я получаю желаемый ответ. Если я закодирую свою программу на С# для подключения к этому серверу со следующим кодом, использующим Oracle.DataAccess.Client, он работает.
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
.
Почему это так? Что различается между этими двумя библиотеками, потому что на основе того, что я читал до сих пор, это не должно быть проблемой.
Дополнительная информация:
- % ORACLE_HOME% и% TNS_ADMIN% НЕ определены (помните, что работа tnsping и Oracle.DataAccess)
- PATH имеет
C:\oracle\11g\BIN
. - Моя машина имеет только один
tnsnames.ora
файл
Если я переведу tnsnames.ora в то же место, что и мой .exe файл, он работает. Почему Oracle.DataAccess может найти tnsnames.ora в каталоге C:\oracle\11g\network\admin
, но Oracle.ManagedAccess не может?