Skip to content

SQLPrimaryKeys主键信息查询示例代码

c
typedef struct
{
    char tableCat[50];
    SQLLEN tableCatLen;
    char tableSchem[50];
    SQLLEN tableSchemLen;
    char tableName[50];
    SQLLEN tableNameLen;
    char columnName[50];
    SQLLEN columnNameLen;
    short keySeq;
    SQLLEN keySeqLen;
    char pkName[50];
    SQLLEN pkNameLen;
}PrimaryKeysInfo;

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 = SQLPrimaryKeys(hstmt, (SQLCHAR*)NULL, 0, (SQLCHAR*)"SYSDBA", SQL_NTS, (SQLCHAR*)"MYTALBE", SQL_NTS);

    PrimaryKeysInfo info;
    ret = SQLBindCol(hstmt, 1, SQL_C_CHAR, info.tableCat, 50, &info.tableCatLen);
    ret = SQLBindCol(hstmt, 2, SQL_C_CHAR, info.tableSchem, 50, &info.tableSchemLen);
    ret = SQLBindCol(hstmt, 3, SQL_C_CHAR, info.tableName, 50, &info.tableNameLen);
    ret = SQLBindCol(hstmt, 4, SQL_C_CHAR, info.columnName, 50, &info.columnNameLen);
    ret = SQLBindCol(hstmt, 5, SQL_C_SHORT, &info.keySeq, 2, &info.keySeqLen);
    ret = SQLBindCol(hstmt, 6, SQL_C_CHAR, info.pkName, 50, &info.pkNameLen);

    while (TRUE)
    {
        ret = SQLFetch(hstmt);
        if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
            break;
        printf("Catalog: %s, Schema: %s, Name: %s, ColName: %s, Seq: %d, PkName: %s\n",
            info.tableCat, info.tableSchem, info.tableName, info.columnName, info.keySeq, info.pkName);
    }
    SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
}