如何遍历数据源中的表名称

 如何遍历数据源中的表名称

枚举表名称是个有用的功能,但在网上一时没有找到实现这种功能的代码,于是自己做了一个,特贴出源代码,一是为了资源共享,二是希望大家看看这段代码有没有不严格的地方,因为我对ODBC API不是太熟悉,谢谢!

[源代码]
// VC++6.0


#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <iostream>

// 测试一: ODBC数据源
// const char strDsn[] = "DSN=Test;";
// 测试二: 联接字符串
const char strDsn[] = "DBQ=F://Test.xls;Driver={Microsoft Excel Driver (*.xls)};";

void main( void )
{
    //分配环境句柄
    SQLHENV m_henv;
    if( SQL_SUCCESS == SQLAllocEnv(&m_henv) )
    {
        //分配连接句柄
        SQLHDBC m_hdbc;
        if( SQL_SUCCESS == SQLAllocConnect(m_henv,&m_hdbc) )
        {
            // 连接数据源
            UCHAR szConnectOutput[512];
            SWORD nResult;
            if( SQL_SUCCESS == SQLDriverConnect( m_hdbc,
                                                 NULL,
                                                 (UCHAR*)strDsn,
                                                 SQL_NTS,
                                                 szConnectOutput,
                                                 sizeof(szConnectOutput),
                                                 &nResult,
                                                 SQL_DRIVER_COMPLETE ) )
            {
                SQLHSTMT hstmt = NULL;
                if( SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_STMT,
                                                  m_hdbc,
                                                  &hstmt) )
                {
                    if( SQL_SUCCESS == SQLTables( hstmt,
                                                  NULL,
                                                  0,
                                                  NULL,
                                                  0,
                                                  NULL,
                                                  0,
                                                  NULL,
                                                  0) )
                    {
                        SDWORD cb;
                        char szTable[255];
                        char szTableType[255];
                        SQLBindCol( hstmt, 3, SQL_C_CHAR, szTable, 255, &cb );
                        SQLBindCol( hstmt, 4, SQL_C_CHAR, szTableType, 255, &cb );
                        while( SQL_SUCCESS == SQLFetch(hstmt) )
                        {
                            std::cout << szTableType << " [" << szTable << "]" << std::endl;
                        }
                    }
                    SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
                }
            }
            SQLDisconnect( m_hdbc );
        }
        SQLFreeHandle( SQL_HANDLE_ENV, m_henv );
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值