Как связать С++ и Oracle
Как я пытался сделать:
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;
}
#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
Может я что то неправильно делаю? И есть ли другой способ?
Что-то ни в одном примере не нашёл, чтобы третьим аргументом передавали что-то наподобие "localhost:1521/xe". Обычно там пустая строка.
2. createConnection принимает UString и я решил UString и передавать.
3. Мануал листал.
Код:
const string userName = "HR";
const string password = "password";
const string connectString = "";
Environment *env = Environment::createEnvironment();
{
Connection *conn = env->createConnection(
userName, password, connectString);
const string password = "password";
const string connectString = "";
Environment *env = Environment::createEnvironment();
{
Connection *conn = env->createConnection(
userName, password, connectString);
Попробуй catch(...).
Код:
}
else {
/* convert mapping */
if ( 0 == (retval =
WideCharToMultiByte( code_page,
0,
outwbuffer,
outbuff_size,
lpDestStr,
cchDest,
NULL,
-> NULL )) )
goto error_cleanup;
}
}
else {
/* convert mapping */
if ( 0 == (retval =
WideCharToMultiByte( code_page,
0,
outwbuffer,
outbuff_size,
lpDestStr,
cchDest,
NULL,
-> NULL )) )
goto error_cleanup;
}
}
Прошлая проблема решена? Если да, то что помогло?
userName, password, connectString); не выполняется по другой причине
Код:
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);
__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,
Почему это может быть?
GetLastError.
Нету GetLastError, так как ошибка критическая
Цитата: Mediv63
Нету GetLastError, так как ошибка критическая
если не GetLastError - то тогда отладчик
Короче лучше использовать otlv4.h для связи с ораклом