获取SQL server数据库中所有表的数据 C++实现
时间: 2024-03-18 07:41:37 浏览: 97
C++获取SQL Server数据库内容
要在 C++ 中获取 SQL Server 数据库中所有表的数据,你需要使用 Microsoft 的 SQL Server Native Client 或 ODBC 驱动程序。
下面是一段使用 SQL Server Native Client 的代码示例,它将获取指定数据库中所有表的数据:
```cpp
#include <iostream>
#include <windows.h>
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
int main()
{
SQLHANDLE henv = SQL_NULL_HENV;
SQLHANDLE hdbc = SQL_NULL_HDBC;
SQLHANDLE hstmt = SQL_NULL_HSTMT;
// 初始化环境句柄
SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
std::cout << "Error allocating environment handle!" << std::endl;
return -1;
}
// 设置环境属性
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
std::cout << "Error setting environment attribute!" << std::endl;
return -1;
}
// 分配连接句柄
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
std::cout << "Error allocating connection handle!" << std::endl;
return -1;
}
// 连接数据库
const char* connstr = "DRIVER={SQL Server Native Client 11.0};SERVER=localhost;DATABASE=mydatabase;Trusted_Connection=yes;";
ret = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)connstr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
std::cout << "Error connecting to database!" << std::endl;
return -1;
}
// 分配语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
std::cout << "Error allocating statement handle!" << std::endl;
return -1;
}
// 查询所有表名
SQLCHAR* query = (SQLCHAR*)"SELECT name FROM sys.tables";
ret = SQLExecDirect(hstmt, query, SQL_NTS);
if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
{
std::cout << "Error executing statement!" << std::endl;
return -1;
}
// 遍历结果集,输出表名
SQLCHAR name[256];
while (SQLFetch(hstmt) == SQL_SUCCESS)
{
SQLGetData(hstmt, 1, SQL_C_CHAR, name, 256, NULL);
std::cout << name << std::endl;
}
// 释放资源
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
```
这段代码使用 sys.tables 系统视图获取所有表名,并遍历结果集输出表名。你可以根据需要修改查询语句和输出方式。
阅读全文