加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

来自MARS的ODBC是来自VENUS的ADO/OLEDB吗?

发布时间:2020-12-15 03:03:21 所属栏目:Java 来源:网络整理
导读:简短的问题: 我发现我需要使用MARS而不是ADO / OLEDB,这是正确的吗? 更长的解释: 我刚刚发现我的ODBC代码(使用“Driver = {SQL Native Client}”,MFC CDatabase代码)需要有MARS(“MARS_Connection = yes;”),因为虽然我在打开RecordSet时没有发出多个SELE
简短的问题:
我发现我需要使用MARS而不是ADO / OLEDB,这是正确的吗?

更长的解释:

我刚刚发现我的ODBC代码(使用“Driver = {SQL Native Client}”,MFC CDatabase代码)需要有MARS(“MARS_Connection = yes;”),因为虽然我在打开RecordSet时没有发出多个SELECT,但我这样做了获取一批行,然后需要打开另一个RecordSet来发出新的SELECT,然后返回到下一批的第一个RecordSet.没有MARS我得到ODBC错误“连接忙于另一个命令的结果”.一切都很公平.

但是,我的代码与ADO / OLEDB(“Provider = SQLNCLI”,#import msado15.dll)相同,而不是ODBC.在同样的情况下,我没有必须指定“MarsConn = yes”.

我感到困惑/惊讶.这是正确/预期的,还是我错过了什么?

解决方法

如果有人有兴趣,我发现问题/区别是什么.由于ADO案例中的一个微妙问题,我不得不重新访问代码,结果证明这是相关的.

如果你需要多个并发RecordSet,那么使用ODBC很容易,因为如果你不使用MARS,它只是错误,如上所述.

然而,使用ADO / OLEDB,它更加微妙.当我不使用MARS时,多个RecordSets似乎正常工作.但是,在幕后,会发生什么是ADO自动为每个会话打开另一个新会话,但你不知道它并且无法分辨.事实证明这是非常缓慢的,因为每个会话都需要一个完整的审计登录和关闭,我一直在创造,关闭和重新创造.

因此,我为ADO提供了“MARS Connection = True”,并且lo&看来,它现在的行为与ODBC类似,重新使用现有连接而不是创建新连接.

所以道德是:你必须拥有MARS for ODBC,而ADO / OLEDB将允许多个并发RecordSets而不使用MARS做自己的事情,但它可能(好)不是你想要/最好的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读