C++封装odbc连接sql server的增删查改
时间: 2023-07-01 14:17:38 浏览: 34
以下是用C++封装ODBC连接SQL Server的增删查改示例代码:
```cpp
#include <sql.h>
#include <sqlext.h>
#include <string>
#include <iostream>
using namespace std;
class SQLServerConnection {
public:
SQLServerConnection(string server, string database, string username, string password) {
connHandle = NULL;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &envHandle);
SQLSetEnvAttr(envHandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC, envHandle, &connHandle);
SQLDriverConnect(connHandle, NULL, (SQLCHAR*)("DRIVER={SQL Server};SERVER=" + server + ";DATABASE=" + database + ";UID=" + username + ";PWD=" + password + ";"), SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
}
~SQLServerConnection() {
SQLDisconnect(connHandle);
SQLFreeHandle(SQL_HANDLE_DBC, connHandle);
SQLFreeHandle(SQL_HANDLE_ENV, envHandle);
}
void execute(string query) {
SQLAllocHandle(SQL_HANDLE_STMT, connHandle, &stmtHandle);
SQLExecDirect(stmtHandle, (SQLCHAR*)query.c_str(), SQL_NTS);
SQLFreeHandle(SQL_HANDLE_STMT, stmtHandle);
}
void insert(string table, string columns, string values) {
string query = "INSERT INTO " + table + "(" + columns + ") VALUES(" + values + ")";
execute(query);
}
void update(string table, string setColumn, string setValue, string whereColumn, string whereValue) {
string query = "UPDATE " + table + " SET " + setColumn + "='" + setValue + "' WHERE " + whereColumn + "='" + whereValue + "'";
execute(query);
}
void remove(string table, string whereColumn, string whereValue) {
string query = "DELETE FROM " + table + " WHERE " + whereColumn + "='" + whereValue + "'";
execute(query);
}
void select(string table, string columns = "*", string whereColumn = "", string whereValue = "") {
string query = "SELECT " + columns + " FROM " + table;
if (!whereColumn.empty()) {
query += " WHERE " + whereColumn + "='" + whereValue + "'";
}
SQLAllocHandle(SQL_HANDLE_STMT, connHandle, &stmtHandle);
SQLExecDirect(stmtHandle, (SQLCHAR*)query.c_str(), SQL_NTS);
SQLCHAR column[256];
SQLLEN indicator;
int numCols = 0;
SQLNumResultCols(stmtHandle, (SQLSMALLINT*)&numCols);
while (SQLFetch(stmtHandle) == SQL_SUCCESS) {
for (int i = 1; i <= numCols; i++) {
SQLGetData(stmtHandle, i, SQL_C_CHAR, column, sizeof(column), &indicator);
cout << (char*)column << " ";
}
cout << endl;
}
SQLFreeHandle(SQL_HANDLE_STMT, stmtHandle);
}
private:
SQLHANDLE envHandle;
SQLHANDLE connHandle;
SQLHANDLE stmtHandle;
};
int main() {
string server = "localhost\\SQLEXPRESS";
string database = "test";
string username = "sa";
string password = "password";
SQLServerConnection conn(server, database, username, password);
// 插入数据
conn.insert("myTable", "name, age, gender", "'Tom', 20, 'M'");
// 更新数据
conn.update("myTable", "age", "25", "name", "Tom");
// 删除数据
conn.remove("myTable", "name", "Tom");
// 查询数据
conn.select("myTable");
conn.select("myTable", "name, age");
conn.select("myTable", "*", "gender", "M");
return 0;
}
```
在上面的示例代码中,我们使用了ODBC API来连接SQL Server数据库,并封装了常见的增删查改操作。你可以根据自己的需要,修改代码以实现更复杂的功能。
相关推荐


















