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

标签 odbc oledb ado recordset sql-server-mars

简短的问题:
我发现我需要通过 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/

相关文章:

mysql - Filemaker Pro 10 : How to get the unique ID of last insert on mySQL tables (ODBC)

excel - 如何在 VBA 连接脚本中使用 DSN 文件?

sql-server - 存储过程中的 PHP PDO unixODBC FreeTDS SQL Server 'converting data type varchar(max) to datetime'

asp.net - “The ' Microsoft.Jet.OLEDB.4.0 ' provider is not registered on the local machine”…DNN

sql - 无法使用 ADO 从 VBA/Excel 写入 SQL

sql - Access ODBC : JOIN between tables in different database files

vb.net - VB.NET 中无法识别 OleDbConnection

sql - SQL 中的 2x 1 到(零或 1)关系

sql-server - 服务器端只进游标中断@@IDENTITY

VB6 ADO 记录集限制