获取Excel表名另一法

除了前一文说的方法外,还有一种方法可获取Excel所有表名


 BOOL GetExcelAllTableNames(CString sExcelFile, CStringList &slTableName)
{
 char strDsn[MAX_PATH];
 CString sDsn;
 
 memset(strDsn,0,MAX_PATH);
 sDsn.Format("DBQ=%s;Driver={Microsoft Excel Driver (*.xls)};",sExcelFile);
 strcpy(strDsn,sDsn);
 
 //分配环境句柄
    SQLHENV m_henv;
    if(SQLAllocEnv(&m_henv) != SQL_SUCCESS)
    {
  return FALSE;
 }
 //分配连接句柄
 SQLHDBC m_hdbc;
 if(SQLAllocConnect(m_henv,&m_hdbc) != SQL_SUCCESS)
 {
  return FALSE;
 }
 // 连接数据源
 UCHAR szConnectOutput[512];
 SWORD nResult;
 if(SQLDriverConnect( m_hdbc,NULL,(UCHAR*)strDsn,SQL_NTS,szConnectOutput,sizeof(szConnectOutput),&nResult,SQL_DRIVER_COMPLETE ) != SQL_SUCCESS)
 {
  return FALSE;
 }
 SQLHSTMT hstmt = NULL;
 if(SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &hstmt) != SQL_SUCCESS)
 {
  return FALSE;
 }

 

//此是获取所有表名,包括名字后带有$符号的系统表
 if(SQLTables( hstmt, NULL, 0, NULL, 0, NULL, 0, 0, 0) != SQL_SUCCESS )

/*也可对其进行限制,如 if(SQLTables( hstmt, NULL, 0, NULL, 0, NULL, 0, (SQLCHAR*)"TABLE", strlen("TABLE")) != SQL_SUCCESS) 此名则只获取类型为TABLE的表*/

{
  return FALSE;
 }
 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(SQLFetch(hstmt) == SQL_SUCCESS)
 {
  if(!slTableName.Find(szTable))
  {
   slTableName.AddTail(szTable);
  }
 }
 
 SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
 SQLDisconnect( m_hdbc ); 
 SQLFreeHandle( SQL_HANDLE_ENV, m_henv );
 
 return TRUE;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值