Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как связать С++ и Oracle

35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
Здравствуйте. Подскажите как связать С++ с ораклом. Нужна хотя бы возможность производить insert в БД.
Как я пытался сделать:
1. Скачал с oracle.com библиотеки и поместил их в C:\oraclexe\app\oracle\product\11.2.0\server\oci\lib\MSVC\vc10
2. Код:


Код:
#include "occi.h"
#pragma comment(lib, "oraocci11.lib")

int main()
{
    cout << "start test module\n";

    UString user = TEXT("test");
    UString password = TEXT("1");
    UString str = TEXT("localhost:1521/xe");



try{
Environment *env = Environment::createEnvironment(Environment::DEFAULT);
Connection *conn = env->createConnection (user, password, str);
}
catch(SQLException ex)
{
cout << ex.getMessage();
}

return 0;
}
В результате после
 
Код:
Connection *conn = env->createConnection (user, password, str);
Программа вылетает с ошибкой:
"Необработанное исключение в "0x72dd077c" в "test.exe": 0xC0000005: Нарушение прав доступа при чтении "0xbe38e217"."

Студия 10, Win7 32

Может я что то неправильно делаю? И есть ли другой способ?
316
07 мая 2012 года
Alm3n
889 / / 29.05.2009
Что-то ни в одном примере не нашёл, чтобы третьим аргументом передавали что-то наподобие "localhost:1521/xe". Обычно там пустая строка.
В чём смысл использовать UString user = TEXT() вместо const string?
Читали этот мануал, кстати?
35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
1. Если передавать пустую, то тоже самое.
2. createConnection принимает UString и я решил UString и передавать.
3. Мануал листал.
316
07 мая 2012 года
Alm3n
889 / / 29.05.2009
Из мана.
 
Код:
const string userName = "HR";
const string password = "password";
const string connectString = "";

Environment *env = Environment::createEnvironment();
{
   Connection *conn = env->createConnection(
      userName, password, connectString);
В конце нужно терменировать среду и соединение.
Попробуй catch(...).
35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
Теперь тут:


Код:
}
        else {
            /* convert mapping */
            if ( 0 == (retval =
                       WideCharToMultiByte( code_page,
                                            0,
                                            outwbuffer,
                                            outbuff_size,
                                            lpDestStr,
                                            cchDest,
                                            NULL,
 ->                                           NULL )) )
                goto error_cleanup;
        }
    }
316
07 мая 2012 года
Alm3n
889 / / 29.05.2009
Прошлая проблема решена? Если да, то что помогло?
35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
Ошибка осталась, только в другом месте. Точнее теперь меня студия тыкает в файл "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\a_map.c" и в место указанное выше, а раньше просто дизасемблированный код показывала. Точнее Connection *conn = env->createConnection(
userName, password, connectString); не выполняется по другой причине
35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
Как я понял рушится на ф-ие:
 
Код:
WideCharToMultiByte(
    __in UINT     CodePage,
    __in DWORD    dwFlags,
    __in_ecount(cchWideChar) LPCWSTR  lpWideCharStr,
    __in int      cchWideChar,
    __out_bcount_opt(cbMultiByte) __transfer(lpWideCharStr) LPSTR   lpMultiByteStr,
    __in int      cbMultiByte,
    __in_opt LPCSTR   lpDefaultChar,
    __out_opt LPBOOL  lpUsedDefaultChar);
А точнее не нравится параметр
 
Код:
__out_bcount_opt(cbMultiByte) __transfer(lpWideCharStr) LPSTR   lpMultiByteStr,

Почему это может быть?
316
07 мая 2012 года
Alm3n
889 / / 29.05.2009
GetLastError.
35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
Нету GetLastError, так как ошибка критическая
1
07 мая 2012 года
kot_
7.3K / / 20.01.2000
Цитата: Mediv63
Нету GetLastError, так как ошибка критическая


если не GetLastError - то тогда отладчик

35K
07 мая 2012 года
Mediv63
50 / / 08.12.2009
Короче лучше использовать otlv4.h для связи с ораклом
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог