c++ 连sqlserver

//要在 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 版本的驱动程序。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 C++ 连接 SQL Server 数据库的示例代码: 首先,你需要包含以下头文件: ```cpp #include <iostream> #include <windows.h> #include <sqltypes.h> #include <sql.h> #include <sqlext.h> ``` 然后,你需要定义连接数据库所需的一些变量,如下所示: ```cpp SQLHANDLE sqlenvhandle; SQLHANDLE sqlconnectionhandle; SQLHANDLE sqlstatementhandle; SQLRETURN retcode; SQLCHAR retconstring[1024]; ``` 接下来,初始化环境句柄和连接句柄: ```cpp SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle); SQLSetEnvAttr(sqlenvhandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle); ``` 然后,设置连接属性: ```cpp SQLCHAR connectionstring[] = "DRIVER={SQL Server};SERVER=server_name;DATABASE=database_name;UID=user_name;PWD=password"; retcode = SQLDriverConnect(sqlconnectionhandle, NULL, connectionstring, SQL_NTS, retconstring, 1024, NULL, SQL_DRIVER_NOPROMPT); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { std::cout << "Connected to SQL Server successfully." << std::endl; } ``` 在连接成功后,你可以执行 SQL 查询语句,如下所示: ```cpp SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle); SQLCHAR query[] = "SELECT * FROM table_name"; retcode = SQLExecDirect(sqlstatementhandle, query, SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { // 处理查询结果 } ``` 最后,释放句柄和关闭连接: ```cpp SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle); SQLDisconnect(sqlconnectionhandle); SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle); SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle); ``` 完整代码示例: ```cpp #include <iostream> #include <windows.h> #include <sqltypes.h> #include <sql.h> #include <sqlext.h> int main() { SQLHANDLE sqlenvhandle; SQLHANDLE sqlconnectionhandle; SQLHANDLE sqlstatementhandle; SQLRETURN retcode; SQLCHAR retconstring[1024]; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &sqlenvhandle); SQLSetEnvAttr(sqlenvhandle, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, sqlenvhandle, &sqlconnectionhandle); SQLCHAR connectionstring[] = "DRIVER={SQL Server};SERVER=server_name;DATABASE=database_name;UID=user_name;PWD=password"; retcode = SQLDriverConnect(sqlconnectionhandle, NULL, connectionstring, SQL_NTS, retconstring, 1024, NULL, SQL_DRIVER_NOPROMPT); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { std::cout << "Connected to SQL Server successfully." << std::endl; } SQLAllocHandle(SQL_HANDLE_STMT, sqlconnectionhandle, &sqlstatementhandle); SQLCHAR query[] = "SELECT * FROM table_name"; retcode = SQLExecDirect(sqlstatementhandle, query, SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { // 处理查询结果 } SQLFreeHandle(SQL_HANDLE_STMT, sqlstatementhandle); SQLDisconnect(sqlconnectionhandle); SQLFreeHandle(SQL_HANDLE_DBC, sqlconnectionhandle); SQLFreeHandle(SQL_HANDLE_ENV, sqlenvhandle); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值