在 C++ 中链接 Microsoft SQL Server 可以通过多种方式实现,以下是一些常见的方法:
- 使用 ODBC(Open Database Connectivity)
- 首先,需要安装 ODBC 驱动程序。
- 然后,使用标准的 ODBC API 来连接和操作数据库。
cpp
#include <iostream>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
int main() {
SQLHENV env;
SQLHDBC dbc;
SQLRETURN ret;
// 分配环境句柄
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
if ((ret!= SQL_SUCCESS) && (ret!= SQL_SUCCESS_WITH_INFO)) {
std::cerr << "Failed to allocate environment handle" << std::endl;
return 1;
}
// 设置环境属性为 ODBC 版本 3
ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if ((ret!= SQL_SUCCESS) && (ret!= SQL_SUCCESS_WITH_INFO)) {
std::cerr << "Failed to set ODBC version" << std::endl;
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// 分配连接句柄
ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
if ((ret!= SQL_SUCCESS) && (ret!= SQL_SUCCESS_WITH_INFO)) {
std::cerr << "Failed to allocate connection handle" << std::endl;
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// 连接数据库
SQLCHAR connStrIn[] = "DRIVER={SQL Server};SERVER=your_server_name;DATABASE=your_database_name;UID=your_user_id;PWD=your_password";
SQLCHAR* connStr = connStrIn;
ret = SQLDriverConnect(dbc, NULL, connStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);
if ((ret!= SQL_SUCCESS) && (ret!= SQL_SUCCESS_WITH_INFO)) {
std::cerr << "Failed to connect to database" << std::endl;
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 1;
}
// 执行数据库操作...
// 断开连接
SQLDisconnect(dbc);
// 释放连接句柄
SQLFreeHandle(SQL_HANDLE_DBC, dbc);
// 释放环境句柄
SQLFreeHandle(SQL_HANDLE_ENV, env);
return 0;
}
- 使用 ADO(ActiveX Data Objects)
- 这需要在 Windows 平台上使用,并且需要包含相关的 ADO 库和头文件。
cpp
#include <iostream>
#include <windows.h>
#include <ole2.h>
#include <adoint.h>
int main() {
HRESULT hr;
_ConnectionPtr pConn;
// 初始化 COM 库
hr = CoInitialize(NULL);
if (FAILED(hr)) {
std::cerr << "Failed to initialize COM library" << std::endl;
return 1;
}
// 创建连接对象
hr = pConn.CreateInstance(__uuidof(Connection));
if (FAILED(hr)) {
std::cerr << "Failed to create connection object" << std::endl;
CoUninitialize();
return 1;
}
// 连接数据库
pConn->Open("Provider=SQLOLEDB;Data Source=your_server_name;Initial Catalog=your_database_name;User ID=your_user_id;Password=your_password", "", "", adConnectUnspecified);
if (FAILED(hr)) {
std::cerr << "Failed to connect to database" << std::endl;
pConn->Release();
CoUninitialize();
return 1;
}
// 执行数据库操作...
// 关闭连接
pConn->Close();
// 释放连接对象
pConn->Release();
// 反初始化 COM 库
CoUninitialize();
return 0;
}
- 使用第三方库,如
SQLAPI++
- 首先,需要下载并安装
SQLAPI++
库。
- 首先,需要下载并安装
cpp
#include <iostream>
#include <SAConnection.h>
#include <SACommand.h>
int main() {
SAConnection con;
try {
// 连接数据库
con.Connect("your_server_name", "your_user_id", "your_password", SA_SQLServer_Client);
// 执行数据库操作...
// 断开连接
con.Disconnect();
} catch (SAException &x) {
std::cerr << "Error: " << x.ErrText().GetMultiByteChars() << std::endl;
return 1;
}
return 0;
}
请确保将 your_server_name
(服务器名称)、your_database_name
(数据库名称)、your_user_id
(用户名)和 your_password
(密码)替换为实际的值。