如何遍历数据源中的表名称
(周星星发表于2003-10-21 23:39:22)
[问题的提出]
枚举表名称是个有用的功能,但在网上一时没有找到实现这种功能的代码,于是自己做了一个,特贴出源代码,一是为了资源共享,二是希望大家看看这段代码有没有不严格的地方,因为我对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 );
}
}
最新评论 [发表评论] 查看所有评论 推荐给好友 打印
怎样得到各列任意的一个信息?例如:
字段名为号码,分别为1,2,3
要获得怎样3的信息?
我接触过一段时间VC,现在正在调数据库,希望大家能指点一下, ( wenmang007 发表于 2004-6-21 0:53:00)
这篇文章我觉得要是能详细 些就very good! ( 979710 发表于 2004-5-12 14:33:00)
怎样得到各列任意的一个信息?例如:
字段名为号码,分别为1,2,3
要获得怎样3的信息?
也可以发往我的邮箱探讨一下,谢谢。
把SQLTables换成SQLColumns可以得到各列信息,包括字段名、字段类型、默认值、长度、说明等等。使用方式类似原贴代码,只要把不同的列绑定一下就好了。 ( Margrave 发表于 2003-10-24 16:06:00)
to qiuzf:我知道ADO比ODBC更底层地控制数据库,理论上应该效率更高,但ADO(OLE DB)不该(个人意见)搭在COM之上,这是ADO的致命之伤(还是个人意见),而ODBC却可以跨语言,跨操作系统。我喜欢ODBC,呵呵! ( 周星星 发表于 2003-10-23 14:50:00)
Ado 里面有 OpenSchema 方法可以等到表名. ( qiuzf 发表于 2003-10-23 12:53:00)
GOOD! ( 在下无名 发表于 2003-10-22 19:19:00)
.......................................................
More...
Copyright © 2006 VCKBASE.COM All rights reserved.