Visual Studio C++からODBCを使用してPostgreSQLデータベースから大きなオブジェクトを読み取ろうとしています。私はそれを働かせることはできません。PostgreSQL ODBC Visual C++ BLOBの入手?
ドライバはPostgresSQL ANSI(x64)9.50.04.00です。
列のデータ・タイプを使用して作成、lo
ある:
CREATE DOMAIN lo AS oid;
カラムは、ラージ・オブジェクトのオブジェクトIDが含まれています。
私の理解では、ドライバがlo
タイプを見ると、それはSQL_LONGVARBINARY
として扱います。
ただし、クエリは失敗します。診断メッセージです:私ができる
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);
:ここ
HY003 [Microsoft]の[OBDCドライバマネージャ]プログラム・タイプの範囲外
はノイズ削除とコードでありますデータベースから正常なデータを読み込んでください。また、BLOBデータはJava/JDBCでデータベースから読み取ることができますが、C++で動作する必要があります。
なぜエラーが発生するのですか?それを修正するにはどうすればよいですか?