可以获得Access数据库中表的信息
来源:互联网 发布:淘宝定制规则 编辑:程序博客网 时间:2024/06/07 09:33
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//获得数据库中所有用户表的名称(strCnn:数据库联接字符串;arTables:存放用户表名称的数组;成功返回TRUE,失败返回FALSE)
BOOL GetMDBTables(CString strCnn, CStringArray &arTables)
{
SQLHENV m_henv;
if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_henv) )
{
TRACE(_T("Failed to run SQLAllocHandle/n"));
return FALSE;
}
// 设置版本信息
if( SQL_SUCCESS != SQLSetEnvAttr(m_henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) )
{
TRACE(_T("Failed to run SQLSetEnvAttr/n"));
return FALSE;
}
// 分配连接句柄
SQLHDBC m_hdbc;
if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC,m_henv,&m_hdbc) )
{
TRACE(_T("Failed to run SQLAllocHandle/n"));
return FALSE;
}
// 连接数据源
UCHAR szConnectOutput[512];
SWORD nResult;
if( SQL_SUCCESS != SQLDriverConnect(m_hdbc,NULL,(UCHAR*)strCnn.GetBuffer(MAX_PATH+1),SQL_NTS,szConnectOutput,sizeof(szConnectOutput),&nResult,SQL_DRIVER_COMPLETE) )
{
TRACE(_T("Failed to run SQLDriverConnect/n"));
return FALSE;
}
strCnn.ReleaseBuffer();
SQLHSTMT hstmt = NULL;
if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT,m_hdbc,&hstmt) )
{
TRACE(_T("Failed to run SQLDriverConnect/n"));
return FALSE;
}
// 得到所有表名称和表类型
if( SQL_SUCCESS != SQLTables(hstmt,NULL,0,NULL,0,NULL,0,NULL,0) )
{
TRACE(_T("Failed to run SQLDriverConnect/n"));
return FALSE;
}
SDWORD cb;
char szTableName[256];
char szTableType[256];
CString strName;
SQLBindCol( hstmt, 3, SQL_C_CHAR, szTableName, 255, &cb );
SQLBindCol( hstmt, 4, SQL_C_CHAR, szTableType, 255, &cb );
while( SQL_SUCCESS == SQLFetch(hstmt) )
{
if(strcmp(szTableType,"TABLE")==0)
{
strName=szTableName;
arTables.Add(strName);
}
}
SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
SQLDisconnect( m_hdbc );
SQLFreeHandle( SQL_HANDLE_DBC, m_hdbc );
SQLFreeHandle( SQL_HANDLE_ENV, m_henv );
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//获得数据库中指定用户表的所有字段名称(strCnn:数据库联接字符串;strTable:用户表名称;arFields;存放用户表名称的数组;成功返回TRUE,失败返回FALSE)
BOOL GetMDBFields(CString strCnn, CString strTable, CStringArray &arFields)
{
SQLHENV m_henv;
if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&m_henv) )
{
TRACE(_T("Failed to run SQLAllocHandle/n"));
return FALSE;
}
// 设置版本信息
if( SQL_SUCCESS != SQLSetEnvAttr(m_henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) )
{
TRACE(_T("Failed to run SQLSetEnvAttr/n"));
return FALSE;
}
// 分配连接句柄
SQLHDBC m_hdbc;
if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_DBC,m_henv,&m_hdbc) )
{
TRACE(_T("Failed to run SQLAllocHandle/n"));
return FALSE;
}
// 连接数据源
UCHAR szConnectOutput[512];
SWORD nResult;
if( SQL_SUCCESS != SQLDriverConnect(m_hdbc,NULL,(UCHAR*)strCnn.GetBuffer(MAX_PATH+1),SQL_NTS,szConnectOutput,sizeof(szConnectOutput),&nResult,SQL_DRIVER_COMPLETE) )
{
TRACE(_T("Failed to run SQLDriverConnect/n"));
return FALSE;
}
strCnn.ReleaseBuffer();
SQLHSTMT hstmt = NULL;
if( SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT,m_hdbc,&hstmt) )
{
TRACE(_T("Failed to run SQLDriverConnect/n"));
return FALSE;
}
// 得到所有表名称和字段名称
if( SQL_SUCCESS == SQLColumns(hstmt,NULL,0,NULL,0,NULL,0,NULL,0) )
{
SDWORD cb;
CString str;
char szTableName[256];
char szColumnName[256];
SQLBindCol( hstmt, 3, SQL_C_CHAR, szTableName, 255, &cb );
SQLBindCol( hstmt, 4, SQL_C_CHAR, szColumnName, 255, &cb );
while( SQL_SUCCESS == SQLFetch(hstmt) )
{
if(strcmp(szTableName,(LPCTSTR)strTable)==0)
{
str=szColumnName;
arFields.Add(str);
}
}
}
SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
SQLDisconnect( m_hdbc );
SQLFreeHandle( SQL_HANDLE_DBC, m_hdbc );
SQLFreeHandle( SQL_HANDLE_ENV, m_henv );
return TRUE;
}
- 可以获得Access数据库中表的信息
- 本文使用c#通过oledb可获取excel文件表的结构信息,同理也可以获得access等数据库的表结构信息,实现如下:
- 查询数据库中表使用的空间信息。
- 读取数据库中表和列的信息
- 查找数据库中表空间信息
- 查询数据库中表信息等
- ADO如何取得数据库中表的字段信息
- 查看Oracle数据库中表空间信息的命令方法
- 使用datagrateview控件时,显示数据库中表的信息
- SQLServer导出数据库中表结构信息的方法
- 查看Oracle数据库中表空间信息的命令方法
- 查看Oracle数据库中表空间信息的命令方法
- AIX prtconf可以获得信息
- 使用QT对access数据库进行操作——数据库中表、记录和域的读取
- 数据库中表的设计
- 数据库中表的读取
- 数据库中表的连接
- 数据库中表的操作
- 新开一个分类
- 研究Archetype框架
- conime.exe
- 资本市场看好阿里妈妈 百度遇全新强悍对手
- VC++的MFC程序中操作数据库注意事项
- 可以获得Access数据库中表的信息
- 在项目中使用Struts-menu
- MFC DLL中添加对话框注意事项
- 获取指定名称主机的IP
- 百度二级域名大全 目前为234个http://www.twocity.cn/blog/article.asp?id=818
- js 检测图片类型 和大小 _Yan
- 中铁募资超计划一倍 中铁二局不会退市或私有化
- (源)恶意的comrepl32.exe病毒查杀
- Error Handling with Exceptions【5】