C++ 通过 ODBC 连接 MYSQL
时间: 2024-10-06 18:03:01 浏览: 55
C++通过ODBC(开放数据库连接)连接MySQL是一种常见的数据访问方式,因为ODBC提供了一种标准接口,使得不同类型的数据库系统可以统一处理。以下是基本步骤:
1. **包含头文件**:首先,在C++程序中包含必要的ODBC头文件,如`<sql.h>`、`<odbccp.h>`。
```cpp
#include <sql.h>
#include <odbc.h>
#include <sqlext.h>
```
2. **初始化环境**:创建一个ODBC环境实例,并设置属性。
```cpp
HENV env; // ODBC环境句柄
HDBC dbc; // 数据库连接句柄
SQLRETURN ret;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
if (ret != SQL_SUCCESS) {
// 处理错误
}
// 设置ODBC版本
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
if (ret != SQL_SUCCESS) {
// 处理错误
}
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
if (ret != SQL_SUCCESS) {
// 处理错误
}
```
3. **建立连接**:指定数据库的DSN(数据源名称),用户名和密码。
```cpp
const char* DSN = "MyDatabase";
const char* user = "username";
const char* password = "password";
SQLCHAR szConnectStr[256];
strcpy_s(szConnectStr, sizeof(szConnectStr), (char*)DSN); // 链接到DSN
szConnectStr[strlen(DSN) + 1] = '\0'; // 添加分隔符
ret = SQLDriverConnect(dbc, NULL, szConnectStr, SQL_NTS,
user, SQL_NTS, password, SQL_NTS,
SQL_DEFAULT_DB, SQL_NTS, NULL, SQL_NTS);
if (ret != SQL_SUCCESS) {
// 处理错误
}
```
4. **执行查询**:创建SQL_HSTMT句柄来执行SQL语句,然后执行并获取结果。
```cpp
SQLHSTMT stmt;
SQLRETURN sqlRet = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
// 执行查询
sqlRet = SQLExecDirect(stmt, (SQLCHAR*)"SELECT * FROM table_name", SQL_NTS);
if (sqlRet == SQL_SUCCESS) {
// 处理查询结果
} else {
// 处理错误
}
// 清理资源
SQLFreeHandle(SQL_HANDLE_STMT, stmt);
SQLDisconnect(dbc);
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
```
阅读全文