SQLColumns列信息查询示例代码
c
typedef struct {
char tableCat[50];
SQLLEN tableCatLen;
char tableSchem[50];
SQLLEN tableSchemLen;
char tableName[50];
SQLLEN tableNameLen;
char columnName[50];
SQLLEN columnNameLen;
short dataType;
SQLLEN dataTypeLen;
char typeName[50];
SQLLEN typeNameLen;
int columnSize;
SQLLEN columnSizeLen;
int bufferLength;
SQLLEN bufferLengthLen;
short decimalDigits;
SQLLEN decimalDigitsLen;
short numPrecRadix;
SQLLEN numPrecRadixLen;
short nullable;
SQLLEN nullableLen;
char comments[50];
SQLLEN commentsLen;
char columnDef[50];
SQLLEN columnDefLen;
short sqlDataType;
SQLLEN sqlDataTypeLen;
short sqlDatetimeSub;
SQLLEN sqlDatetimeSubLen;
int charOctetLength;
SQLLEN charOctetLengthLen;
int ordinalPosition;
SQLLEN ordinalPositionLen;
char isNullable[50];
SQLLEN isNullableLen;
}ColInfo;
void main()
{
char szDSN[] = "XuguDB";
char szUID[] = "SYSDBA";
char szAuth[] = "SYSDBA";
SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
SQLRETURN ret = 0;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
ret = SQLConnect(hdbc, (SQLCHAR*)szDSN, SQL_NTS, (SQLCHAR*)szUID, SQL_NTS, (SQLCHAR*)szAuth, SQL_NTS);
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
ret = SQLColumns(hstmt,
(SQLCHAR*)"SYSTEM", SQL_NTS,
(SQLCHAR*)"SYSDBA", SQL_NTS,
(SQLCHAR*)"MYTABLE", SQL_NTS,
(SQLCHAR*)"%", SQL_NTS);
ColInfo info;
SQLBindCol(hstmt, 1, SQL_C_CHAR, info.tableCat, 50, &info.tableCatLen);
SQLBindCol(hstmt, 2, SQL_C_CHAR, info.tableSchem, 50, &info.tableSchemLen);
SQLBindCol(hstmt, 3, SQL_C_CHAR, info.tableName, 50, &info.tableNameLen);
SQLBindCol(hstmt, 4, SQL_C_CHAR, info.columnName, 50, &info.columnNameLen);
SQLBindCol(hstmt, 5, SQL_C_SHORT, &info.dataType, 2, &info.dataTypeLen);
SQLBindCol(hstmt, 6, SQL_C_CHAR, info.typeName, 50, &info.typeNameLen);
SQLBindCol(hstmt, 7, SQL_C_LONG, &info.columnSize, 4, &info.columnSizeLen);
SQLBindCol(hstmt, 8, SQL_C_LONG, &info.bufferLength, 4, &info.bufferLengthLen);
SQLBindCol(hstmt, 9, SQL_C_SHORT, &info.decimalDigits, 2, &info.decimalDigitsLen);
SQLBindCol(hstmt, 10, SQL_C_SHORT, &info.numPrecRadix, 2, &info.numPrecRadixLen);
SQLBindCol(hstmt, 11, SQL_C_SHORT, &info.nullable, 2, &info.nullableLen);
SQLBindCol(hstmt, 12, SQL_C_CHAR, info.comments, 50, &info.commentsLen);
SQLBindCol(hstmt, 13, SQL_C_CHAR, info.columnDef, 50, &info.columnDefLen);
SQLBindCol(hstmt, 14, SQL_C_SHORT, &info.sqlDataType, 2, &info.sqlDataTypeLen);
SQLBindCol(hstmt, 15, SQL_C_SHORT, &info.sqlDatetimeSub, 2, &info.sqlDatetimeSubLen);
SQLBindCol(hstmt, 16, SQL_C_LONG, &info.charOctetLength, 4, &info.charOctetLengthLen);
SQLBindCol(hstmt, 17, SQL_C_LONG, &info.ordinalPosition, 4, &info.ordinalPositionLen);
SQLBindCol(hstmt, 18, SQL_C_CHAR, info.isNullable, 50, &info.isNullableLen);
while (TRUE)
{
ret = SQLFetch(hstmt);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
break;
printf("ColName: %s, Comments: %s\n",
info.columnName, info.comments);
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}