#include "odbcinst.h"
#include <afxdb.h>
#define TABLE_NAME_LENGTH 100
bool GetTables(CString strDSN,CStringArray & strTableNames)
{
strDSN = "DSN=" + strDSN;
CDatabase database;
int ret= -1;
HSTMT hStmt;
UCHAR szName[256];
SDWORD cbName;
// 缺省取用户表、参数选择视图、系统表
CString type = "'TABLE'";
// 通过ODBC打开数据库
try
{
if( !database.OpenEx(strDSN) )
return false;
}
catch(CDBException * e)
{
AfxMessageBox(e->m_strError);
return false;
}
// 分配Statement句柄
//SQLAllocStmt (database.m_hdbc,&hStmt);
SQLAllocHandle (SQL_HANDLE_STMT,database.m_hdbc,&hStmt);
// 获取表信息(返回一个数据表)
ret = SQLTables(hStmt,
NULL,SQL_NTS,
NULL,SQL_NTS,
NULL,SQL_NTS,
(unsigned char *)type.GetBuffer(0),SQL_NTS);
if(ret == SQL_ERROR)
{
SQLFreeStmt(hStmt,SQL_CLOSE);
database.Close();
if(ret == SQL_INVALID_HANDLE )
{
AfxMessageBox("Invalid handle");
return false;
}
AfxMessageBox("Database Could Not be Open");
return false;
}
while(1)
{
// 取数据到缓冲区
ret = SQLFetch(hStmt);
if(ret == SQL_NO_DATA_FOUND)
break;
// 取某一列数据(第3列为表名,其他还有表属性、数据库名等)
ret = SQLGetData(hStmt, 3, SQL_C_CHAR, szName, TABLE_NAME_LENGTH, &cbName);
strTableNames.Add(szName);
}
// 释放句柄
SQLFreeStmt(hStmt,SQL_CLOSE);
database.Close();
return true;
}
ODBC 解析EXCEL 文件 选择worksheet name
最新推荐文章于 2023-06-11 15:57:02 发布