给我C++ ODBC插入数据的完整代码示例
时间: 2024-09-11 08:03:46 浏览: 11
在C++中,使用ODBC(Open Database Connectivity)库来插入数据需要包含一些特定头文件,并通过数据库驱动管理器(ODBC Driver Manager)完成连接、创建游标、执行SQL语句等步骤。下面是一个简单的C++代码示例,假设我们正在使用JDBC(实际上ODBC是另一套API),但它能给你提供一个基本的结构:
```cpp
#include <sql.h>
#include <sqlext.h>
// 数据库连接信息
struct DBConfig {
SQLHENV env; // 环境 handle
SQLHDBC dbc; // 数据库连接 handle
SQLHSTMT stmt; // SQL语句 handle
};
// 初始化数据库连接
void initDatabase(DBConfig& config, const char* server, const char* database, const char* user, const char* password) {
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &config.env);
SQLSetEnvAttr(config.env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, config.env, &config.dbc);
SQLDriverConnect(config.dbc, NULL, (SQLCHAR*)server, SQL_NTS, (SQLCHAR*)database, SQL_NTS, (SQLCHAR*)"UID=" + user + ";PWD=" + password, SQL_NTS, SQL_DRIVER_DEFAULT);
SQLAllocHandle(SQL_HANDLE_STMT, config.dbc, &config.stmt);
}
// 插入数据到表
void insertData(DBConfig& config, const char* tableName, const char* column1, const char* value1, const char* column2, const char* value2) {
std::string sql = "INSERT INTO " + tableName + " (" + column1 + ", " + column2 + ") VALUES (?, ?)";
SQLPrepare(config.stmt, (SQLCHAR*)sql.c_str(), SQL_NTS);
SQLBindParameter(config.stmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, SQL_NULLABLE, (void*)&value1);
SQLBindParameter(config.stmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, SQL_NULLABLE, (void*)&value2);
SQLExecute(config.stmt);
}
// 关闭资源
void cleanup(DBConfig& config) {
SQLFreeHandle(SQL_HANDLE_STMT, config.stmt);
SQLDisconnect(config.dbc);
SQLFreeHandle(SQL_HANDLE_DBC, config.dbc);
SQLFreeHandle(SQL_HANDLE_ENV, config.env);
}
int main() {
DBConfig dbConfig;
try {
initDatabase(dbConfig, "your_server", "your_database", "your_username", "your_password");
insertData(dbConfig, "your_table_name", "column1", "value1", "column2", "value2");
cleanup(dbConfig); // 一定要记得释放资源
} catch (const SQLRETURN& ret) {
if (ret != SQL_SUCCESS) {
// 处理错误...
}
}
return 0;
}
```