Я пытаюсь прочитать большой объект из базы данных PostgreSQL, используя ODBC из Visual Studio C++. Я не могу заставить его работать.PostgreSQL ODBC Visual C++ BLOB Получение?
Драйвер PostgresSQL ANSI (x64) 9.50.04.00.
Тип данных столбца является lo
, созданный с:
CREATE DOMAIN lo AS oid;
В столбце содержит объект идентификаторы крупных объектов.
Мое понимание заключается в том, что, когда водитель видит тип lo
, он будет обрабатывать его как SQL_LONGVARBINARY
.
Однако запрос не выполняется. Сообщение диагностика:
HY003 [Microsoft] [Диспетчер драйверов OBDC] Тип программы из диапазона
Вот код, с шумом удалены:
wchar_t* connect0 = L"DSN=picdb;";
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLLEN sqllen = -1;
PBYTE image = new BYTE[0];
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLDriverConnect(dbc, NULL, connect0, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, L"select lo from image_list where id=964945", SQL_NTS);
SQLFetch(stmt);
SQLGetData(stmt, 1, SQL_LONGVARBINARY, image, 0, &sqllen); //<----- It fails here
image = new BYTE[sqllen];
SQLGetData(stmt, 1, SQL_LONGVARBINARY, image, sqllen, &sqllen);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
я могу читать обычные данные из базы данных просто отлично. И я могу читать данные BLOB из базы данных с помощью Java/JDBC, но мне нужно, чтобы она работала на C++.
Зачем возникает ошибка, и что я могу ее исправить?