Добрый день!
Уважаемые знатоки уповаю на вашу помощь!
Уже несколько дней маюсь с подключением к БД Оракл через ODBC и OLE.
ODBCConnection 64 bit driver

string connectionString = "Driver={Oracle in OraClient11g_home2};SERVER=192.168.x.x;UID=crm;PWD=crm;DBQ=xxx;";
        string selectCommand = "Select fio from CLIENTSFORCRM";
        OdbcConnection cnn = new OdbcConnection(connectionString);
        try
        {
                cnn.Open();
                OdbcCommand cmm = cnn.CreateCommand();
                cmm.CommandText = selectCommand;
                OdbcDataReader rd = cmm.ExecuteReader();
                int fCount = rd.FieldCount;
                for ( int i = 0; i fCount; i ++ )
                {
                   String fName = rd.GetName(i);
                }
                cnn.Close();
               
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);
                cnn.Close();
        }

Подключение происходит успешно, но при вызове OdbcDataReader rd = cmm.ExecuteReader(), возникает ошибка "Arithmetic operation resulted in an overflow", вне зависимости от запроса SELECT...

Используя параметр в приложении IIS "Enable 32-bit applications" to true" не удается найти драйвер

OLEConnection

        string sConnectionString = "Provider=OraOLEDB.Oracle;Data Source=xxx;User Id=crm;Password= crm";
       
        OleDbConnection myConnection = new OleDbConnection(sConnectionString);
        OleDbCommand myCommand = new OleDbCommand(selectCommand, myConnection);
        try
        {
                myConnection.Open();
                OleDbDataReader myReader = myCommand.ExecuteReader();
                myConnection.Close();
        }
        catch(Exception ex)
        {
                myConnection.Close();
        }

Не удается подключиться, при подключении возникает ошибка
ORA-12154: TNS:could not resolve the connect identifier specified.

Наткнулся на решение данной проблемы на сайте Оракла. Но дело в том что с Oracle я не сильно знаком.

Прошу подсказать если кто-то сталкивался с данной проблемой!

Нравится

7 комментариев

Здравствуйте, Александр Сергеевич!

По данной проблеме можно сказать следующее.

Есть подозрение, что подключение проходит успешно к серверу, а не к самой базе, потому в первую очередь проверьте корректность подключения к базе следующим lifehack'ом - в Excel'е выберите источник данных ODBC и используйте в нем аналогичную Вашей строку подключения. В случае корректного подключения у Вас должен отобразится список таблиц базы.

Вторым вариантом проверки корректности подключения является, к примеру, TOAD.

Если оба варианта будут неуспешными, попробуйте использовать не OLE, а ODAC.
А также в ora.names на клиенте прописать аналогичную строку подключения.

Здравствуйте, Андрей!
Спасибо за советы по поводу проверки подключения ODBC.
Буду ковыряться. А вот по поводу соединение через ODAC хотелось бы поподробней.

Я так понял что это библиотека визуальных компонентов ODAC (Oracle Direct Access Components).
Получается что это dll-ка? Хотелось бы понять как ее подключить и к ней обращаться, т.к. примеров особо я не нашел в сети...

Или же Вы имеете ввиду Oracle Data Access Components (ODAC)?
т.е. использовать подключение как в примере:

string oradb = "Data Source=ORCL;User Id=hr;Password=hr;";
 
OracleConnection conn = new OracleConnection(oradb); // C#
 
conn.Open();
 
OracleCommand cmd = new OracleCommand();
 
cmd.Connection = conn;
 
cmd.CommandText = "select department_name from departments where department_id = 10"; cmd.CommandType = CommandType.Text;
 
OracleDataReader dr = cmd.ExecuteReader();
 
dr.Read();
 
label1.Text = dr.GetString(o);
 
conn.Dispose();

Александр Сергеевич,

Oracle Data Access Components (ODAC).

Прикрепляю dll-ку, но у Вас должна быть по идее аналогичная.

Андрей, подключил я библиотеку Oracle.DataAccess.Client к тестовому консольному приложению в студии, но появляется ошибка при создании объекта OracleConnection conn = new OracleConnection();

При использовании System.Data.OracleClient, возникает ошибка уже на соединении к БД Оракл:

Александр Сергеевич,

а непосредственно Oracle Client у Вас установлен?

Oracle Client установлен 2-х версий 32 и 64 разрядный.
Странно, что dll-ки кроме Oracle.DataAccess не могу подцепить к проекту. Во многих ресурсах пишут что нужно подключать несколько библиотек:

oci.dll (renamed from 'oci.dll.dbl')
Oracle.DataAccess.dll
oraociicus11.dll
OraOps11w.dll
orannzsbb11.dll
oraocci11.dll
ociw32.dll

Но при добавлении в References вылетает ошибка.
Возможно, я что-то делаю не так или что-то упустил...

Установите своему проекту в студии Platform target: x86
x86

Так же уточните пож. входные параметры:
1. Какая операционная система и разрядность
2. Какой Oracle и какой OracleClient ставили (версия и разрядность)

Второй вариант:
Если вы хотите работать полностью в 64-х разрядном режиме то после установки 64-х разрядного клиента у Вас должна лежать библиотека Oracle.DataAcces.dll по пути: C:\Windows\Microsoft.NET\assembly\GAC_64\Oracle.DataAccess\

Если описанное выше в Вашем случае не помогло, то удалите все Oracle клиенты ODAC и что вы там еще ставили и поставьте один 64-х разрядный OracleClient, проверти пути и что зарегистрировано в GAC

Показать все комментарии