Home > database >  ODBC does not support the Interval data types
ODBC does not support the Interval data types

Time:09-30

In oracle through ODBC API to query a column type for the Interval day to second data, call the SQLBindCol interface prompt does not support the data types; I put the bundle varchar column type, called SQLFetch interface directly to collapse, look up some information, the Interval type in Oracle 9 I will have support, could you tell me how to set up, is to or ODBC version is too low, how to upgrade? thank you

CodePudding user response:

Write the demo code is as follows:

# include & lt; Windows. H>
# include & lt; Sqltypes. H>
# include & lt; SQL. H>
# include & lt; Sqlext. H>


Int main ()
{
SQLHENV henv;
SQLHDBC HDBC;
SQLHSTMT HSTMT;
SQLHDESC hAPDdesc;
SQLHDESC hARDdesc;

SQLRETURN retcode;

SQLCHAR OutConnStr [1024].
SQLSMALLINT OutConnStrLen;
Retcode=SQLAllocHandle (SQL_HANDLE_ENV SQL_NULL_HANDLE, & amp; Henv);
If (retcode==SQL_SUCCESS | | retcode==SQL_SUCCESS_WITH_INFO) {
Retcode=SQLSetEnvAttr (henv SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3 SQLPOINTER *, 0).
If (retcode==SQL_SUCCESS | | retcode==SQL_SUCCESS_WITH_INFO) {
Retcode=SQLAllocHandle (SQL_HANDLE_DBC henv, & amp; HDBC);
If (retcode==SQL_SUCCESS | | retcode==SQL_SUCCESS_WITH_INFO) {
Retcode=SQLDriverConnect (
HDBC,
NULL,
(SQLCHAR *) "DRIVER={Oracle in OraClient11g_home1_32bit}; SERVER=testoracle; UID=testoracle; The PWD=123; DBQ=testoracle;" ,
SQL_NTS,
OutConnStr,
1024,
& OutConnStrLen,
SQL_DRIVER_NOPROMPT);
If (retcode==SQL_SUCCESS | | retcode==SQL_SUCCESS_WITH_INFO) {
Retcode=SQLAllocHandle (HDBC SQL_HANDLE_STMT, & amp; HSTMT);

Retcode=SQLPrepare (HSTMT, (SQLCHAR *) "select interval_column from TESTORACLE. DATATYPE_INTERVAL;" , SQL_NTS);
Retcode=SQLExecute (HSTMT);

SQLINTEGER desclen;
Retcode=SQLGetStmtAttr (HSTMT, SQL_ATTR_APP_ROW_DESC, & amp; HARDdesc SQL_IS_POINTER, & amp; Desclen);
Retcode=SQLSetDescField (hARDdesc, 1, SQL_DESC_TYPE, SQLPOINTER SQL_INTERVAL, 0).
Retcode=SQLSetDescField (hARDdesc, 1, SQL_DESC_CONCISE_TYPE, SQLPOINTER SQL_C_INTERVAL_DAY_TO_SECOND, SQL_IS_INTEGER);//return 1
Retcode=SQLSetDescField (hARDdesc, 1, SQL_DESC_DATETIME_INTERVAL_CODE, SQLPOINTER SQL_CODE_DAY_TO_SECOND, SQL_IS_INTEGER);//return 1

//Bind
SQL_INTERVAL_STRUCT is;
SQLLEN cbValue;
Retcode=SQLBindCol (HSTMT, 1, SQL_C_INTERVAL_DAY_TO_SECOND, & amp; Is, sizeof (SQL_INTERVAL_STRUCT), & amp; CbValue);//return 1, error message: do not support this type
//the Fetch
Retcode=SQLFetch (HSTMT);

If (retcode==SQL_SUCCESS | | retcode==SQL_SUCCESS_WITH_INFO)
{
}
SQLCancel (HSTMT);
If (retcode==SQL_SUCCESS | | retcode==SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle (SQL_HANDLE_STMT HSTMT);
}
SQLDisconnect (HDBC);
}
SQLFreeHandle (SQL_HANDLE_DBC HDBC);
}
}
SQLFreeHandle (SQL_HANDLE_ENV henv);
}
system("pause");
return 0;
}
  • Related