DBNETLIB ConnectionRead(recv()) 一般性网络错误

一般大家在使用ADO进行C++ 编程时,会遇到DBNETLIB ConnectionRead(recv()) 一般性网络错误,解决这个错误,先使用PING命令检查ADO连接的数据库IP地址,看看是否有网络丢包,在网络正常的情况下,有一种原因会造成上述错误,那就是数据库创建连接之前,_ConnectionPtr指针没有创建唯一实例,以及数据连接没有设置为长连接。解决此问题的代码如下:

1.

m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionTimeout= 0;
m_pConnection->Open((_bstr_t)m_strConnect,_T(""),_T(""),adModeUnknown);

当然,connectionTimeout,也可根据网络环境设置连接时间,如不设置,默认时间为30s。设置为0,为不限时间一直连接,但这样有可能会导致程序死锁,如果网络环境差,可以设置为100或者更多。

接上述问题,如果_ConnectionPtr指针实例在当前线程中每次数据库操作时创建,也会导致一般性网络错误,所有在一个线程中,唯一实例(_ConnectionPtr、_RecordsetPtr、_CommandPtr)被创建一次后,就可以进行当前线程中所有数据库操作,除非唯一实例被Release,才需要重新创建唯一实例。

2.

打开端口1433,MSSQL默认是TCP:1433;

防火墙将TCP:1433端口,添加入站规则;

SQL Server Browser 服务需要启动,才能正常.



  • 0
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

owetointernet

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值