Я разрабатываю очень простое приложение, которое собираюсь использовать для устранения неполадок, возникающих у меня на нескольких машинах, но еще до того, как я зашел так далеко, я столкнулся с несколькими проблемами, включая различия в архитектуре процессора и библиотеки баз данных Oracle.
У меня есть сервер базы данных, указанный в tnsnames.ora
, находящийся в моем каталоге C:\oracle\11g\network\admin
. Если я обращаюсь к этому серверу, я получаю желаемый ответ. Если я запрограммирую свою программу на C# для подключения к этому серверу с помощью следующего кода, используя 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 не может?