SQLDriverConnect连接数据库失败解决方案(全的不能再全)

在进行数据库实验(ODBC使应用程序连接、访问数据库)的时候用SQLDriverConnect会连接失败,然后开始我的漫长解决之路…

1、利用.udl文件获得SQL实例名称。使用.udl获取数据库的连接字符
有时候直接重命名文件并不能更改文件类型,请戳右边这是更改扩展名的方法
结果如下:标蓝的就是实例名称
标蓝的就是
然而我得到实例名称也没有用啊!!我本来就知道自己的实例名称啊喂!!

2、开启远程连接步骤,结果打开第10步“SQL Server服务”的时候显示在这里插入图片描述
这时就要卸载掉一个东西,戳右边卸载Microsoft SQL Server 2012 Express LocalDB
而且第10步里面显示SQL Server Browser是正在运行的状态,而我的是禁用的,然后就搜了搜这个东西的用处SQL Server Browser的功能,里面说:

SQL Server Browser服务主要的作用是侦听UDP 1434端口,当你的SQL Server是命名实例的时候,即默认侦听端口不是TCP 1433的时候,客户端需要先通过UDP 1434端口连接服务器上的SQL Browser服务获取该服务器上命名实例实际式样的TCP端口,这样才能建立后续连接。

虽然我的端口是1433,但保险起见我还是决定启动它,但是你会发现启动的键是灰色的,此时要先WIN+R打开运行,在运行中输入services.msc,找到SQL Server Browser启用,才能启用SQL Server里面的SQL Server Browser
在这里插入图片描述
(我这里是已经启动过了的)
然而,这么一套坐下来,并没有用…

3、还看到有说要配置防火墙的戳这里
好的,仍然没用

期间各种百度、谷歌,实践了各种方法,以及,各种失败。。。

4、等登等登final解答
其实是visual studio默认32位,然而SQL是64位(话说我上个学期写cpu的时候也被坑过…),但是改了之后,会出现下图:
在这里插入图片描述
报错的地方是:SQLCHAR和SQLBindParameter最后一个参数类型不兼容在这里插入图片描述
在这里插入图片描述
于是把SQLCHAR改成SQLLEN,然后…终于跑起来了。枯了。
但是这是用的下发的demo.c程序跑的,当我一模一样地修改自己的cpp文件之后,却跑不起来是怎么回事??把demo.c复制粘贴覆盖掉我的c文件中,却也会connect failed…有人知道为什么的话,望赐教!

最后也只能在demo.c的环境中写我的c文件了…太坎坷了…

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中连接数据库通常需要使用一些第三方库,比如ODBC、MySQLSQLite等。这里以ODBC为例,介绍如何在C++中连接数据库。 1. 安装ODBC驱动程序 首先需要安装ODBC驱动程序,可以从官网下载并安装。安装完成后,需要在ODBC数据源管理器中配置好需要连接的数据库信息。 2. 引入头文件 在C++代码中,需要引入ODBC的头文件,通常为"sql.h"和"sqlext.h"。 3. 初始化ODBC环境 在使用ODBC之前,需要初始化ODBC环境,包括调用SQLAllocHandle函数分配环境句柄和连接句柄,以及设置连接属性。 ```c++ SQLHENV henv; // 环境句柄 SQLHDBC hdbc; // 连接句柄 SQLRETURN ret; // 返回值 ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); // 分配环境句柄 ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); // 设置ODBC版本 ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); // 分配连接句柄 ``` 4. 连接数据库 连接数据库需要使用SQLDriverConnect函数,传入连接字符串和用户名密码等信息。 ```c++ // 连接数据库 SQLCHAR* conn_str = (SQLCHAR*)"DSN=your_dsn_name;UID=your_user_name;PWD=your_password"; ret = SQLDriverConnect(hdbc, NULL, conn_str, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE); ``` 5. 执行SQL语句 连接数据库成功后,就可以执行SQL语句了。下面是一个简单的例子,查询表中所有数据并打印出来。 ```c++ // 执行SQL语句 SQLHSTMT hstmt; // 语句句柄 SQLCHAR* sql = (SQLCHAR*)"SELECT * FROM your_table_name"; ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); // 分配语句句柄 ret = SQLExecDirect(hstmt, sql, SQL_NTS); // 执行SQL语句 // 遍历结果集 SQLCHAR col_name[256]; SQLLEN col_name_len; int col_count = 0; ret = SQLNumResultCols(hstmt, (SQLSMALLINT*)&col_count); // 获取结果集列数 while (SQLFetch(hstmt) == SQL_SUCCESS) { for (int i = 1; i <= col_count; i++) { ret = SQLDescribeCol(hstmt, i, col_name, sizeof(col_name), &col_name_len, NULL, NULL, NULL, NULL); // 获取列名 SQLLEN col_value_len; char col_value[256]; ret = SQLGetData(hstmt, i, SQL_C_CHAR, col_value, sizeof(col_value), &col_value_len); // 获取列值 printf("%s: %s\n", col_name, col_value); } printf("------------------------\n"); } // 释放资源 SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); ``` 以上就是在C++中连接数据库的基本步骤和代码示例。需要注意的是,不同的数据库连接方式和语法可能会有所不同,具体可以参考相应的文档和API。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值