//要在 C++ 中连接 SQL Server 数据库,可以使用 Microsoft 提供的 SQL Server Native Client 或者 //ODBC 驱动程序。以下是使用 SQL Server Native Client 连接数据库的基本步骤:
//1. 安装 SQL Server Native Client 驱动程序。
//2. 在 C++ 代码中包含头文件 sqlncli.h。
//3. 使用 SQL Server Native Client 提供的 API 连接数据库,例如:
//cpp
#include <windows.h>
#include <sqlncli.h>
int main()
{
// 初始化 COM 库
CoInitialize(NULL);
// 创建连接对象
SQLHANDLE hConn;
SQLAllocHandle(SQL_HANDLE_DBC, SQL_NULL_HANDLE, &hConn);
// 连接数据库
SQLCHAR* szConnStr = (SQLCHAR*)"DRIVER={SQL Server Native Client 11.0};SERVER=127.0.0.1;DATABASE=TestDB;UID=sa;PWD=123456";
SQLRETURN ret = SQLDriverConnectA(hConn, NULL, szConnStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
// 连接成功,执行 SQL 查询
SQLHANDLE hStmt;
SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
SQLCHAR* szSql = (SQLCHAR*)"SELECT * FROM TestTable";
SQLExecDirectA(hStmt, szSql, SQL_NTS);
// 处理查询结果
SQLCHAR szName[256];
SQLINTEGER nAge;
while (SQLFetch(hStmt) == SQL_SUCCESS)
{
SQLGetData(hStmt, 1, SQL_C_CHAR, szName, sizeof(szName), NULL);
SQLGetData(hStmt, 2, SQL_C_LONG, &nAge, sizeof(nAge), NULL);
printf("Name: %s, Age: %d\n", szName, nAge);
}
// 释放资源
SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
}
else
{
// 连接失败,输出错误信息
SQLCHAR szErrorMsg[SQL_MAX_MESSAGE_LENGTH];
SQLSMALLINT nErrorMsgLen;
SQLGetDiagRecA(SQL_HANDLE_DBC, hConn, 1, NULL, NULL, szErrorMsg, SQL_MAX_MESSAGE_LENGTH, &nErrorMsgLen);
printf("Connect failed: %s\n", szErrorMsg);
}
// 断开连接,释放资源
SQLDisconnect(hConn);
SQLFreeHandle(SQL_HANDLE_DBC, hConn);
// 释放 COM 库
CoUninitialize();
return 0;
}
//
//上述代码中,使用 SQLDriverConnectA 函数连接数据库,其中 szConnStr 参数指定连接字符串,
//包括驱动程序名称、服务器地址、数据库名称、用户名和密码等信息。连接成功后,
//使用 SQLExecDirectA 函数执行 SQL 查询,使用 SQLGetData 函数获取查询结果。
//最后,使用 SQLDisconnect 函数断开连接,使用 SQLFreeHandle 函数释放资源。
//需要注意的是,使用 SQL Server Native Client 连接数据库需要先初始化 COM 库,
//使用 CoInitialize 函数初始化,使用 CoUninitialize 函数释放。
//另外,需要在连接字符串中指定正确的驱动程序名称和版本号,
//例如 "SQL Server Native Client 11.0" 表示 SQL Server 2012 版本的驱动程序。