gpt4 book ai didi

odbc - 来自火星的 ODBC 是来自金星的 ADO/OLEDB 吗?

转载 作者:行者123 更新时间:2023-12-04 12:14:55 25 4
gpt4 key购买 nike

简短的问题:
我发现我需要通过 ODBC 使用 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 案例中的一个微妙问题,我不得不重新访问代码,结果证明这是相关的。

如果您需要多个并发记录集,使用 ODBC 很容易,因为如果您不使用 MARS,它只会出错,如上所述。

然而,对于 ADO/OLEDB,它更加微妙。当我不使用 MARS 时,多个 RecordSet 似乎可以正常工作。但是,在幕后,ADO 会自动为每个 session 打开另一个新 session ,但您对此一无所知,也无法判断。结果证明这真的很慢,因为每个 session 都需要完整的审核登录和关闭,而我一直在创建、关闭和重新创建。

因此,我为 ADO 设置了“MARS Connection=True”,瞧,它现在的行为就像 ODBC,重新使用现有连接而不是创建新连接。

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

关于odbc - 来自火星的 ODBC 是来自金星的 ADO/OLEDB 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com