简体   繁体   English

ADO 与 OLE DB 有什么关系?

[英]How is ADO related to OLE DB?

Question

  1. How is ADO related to OLE DB and what does mean the annoucement of Microsoft to drop OLE DB Providers for SQL Server mean? ADO 与 OLE DB 有什么关系?微软宣布放弃 OLE DB Providers for SQL Server意味着什么?
  2. Does it mean that if we switch to ADO it will not work with SQL Server 2014 and never?这是否意味着如果我们切换到 ADO,它将无法与 SQL Server 2014 一起使用,并且永远无法使用?

Microsoft has announced the deprecation of the SQL Server Native Client OLE DB provider, and that SQL Server 2012 is the last version of SQL Server to support the provider. Microsoft 已宣布弃用 SQL Server Native Client OLE DB 提供程序,并且 SQL Server 2012 是支持该提供程序的 SQL Server 的最后一个版本。

Context语境

We are a Delphi shop.我们是德尔福的专卖店。 We are on Delphi 7 and BDE and want to migrate away from BDE, possibly also move to Delphi XE2 or newer.我们使用 Delphi 7 和 BDE,并希望从 BDE 迁移,也可能迁移到 Delphi XE2 或更新版本。 Our DBMS of choice is Microsoft SQL Server.我们选择的 DBMS 是 Microsoft SQL Server。 We consider to move to ADO but are worried about it's future proofness in context of the above announcement.我们考虑转向 ADO,但在上述公告的背景下担心它的未来证明。

Is this thinking of the relation ok?这种关系的想法好吗? :

Delphi <---> ADO <---> OLE DB <---> DBMS

Do i understand correctly that Microsoft wants to move to?:我是否正确理解微软想要转移到?:

Delphi <---> ADO <---> OLE DB-bridge-ODBC <---> ODBC <---> DBMS

What they mean is that they will no longer be creating the SQL Server Native Client OLEDB Provider.他们的意思是他们将不再创建 SQL Server Native Client OLEDB 提供程序。 There are a number of OLE DB Providers that you can use to access SQL Server:有许多 OLE DB 提供程序可用于访问 SQL Server:

  • Microsoft OLE DB Provider for SQL Server (SQLOLEDB)适用于 SQL Server 的 Microsoft OLE DB 提供程序(SQLOLEDB)

    This is the SQL Server 2000 era OLEDB Provider that ships with the operating system itself.这是操作系统本身附带的 SQL Server 2000 时代的 OLEDB 提供程序。

  • SQL Native Client 9.0 OLE DB provider (SQLNCLI) SQL 本机客户端 9.0 OLE DB 提供程序(SQLNCLI)

    • shipped with SQL Server 2005 SQL Server 2005 附带
    • must manually install on client PCs必须在客户端 PC 上手动安装
    • can connect to SQL Server 7, 2000, and 2005可以连接到 SQL Server 7、2000 和 2005
    • can connect to SQL Server 2008, but they recommend you use the new native client可以连接到 SQL Server 2008,但他们建议您使用新的本机客户端
  • SQL Server Native Client 10.0 OLE DB Provider (SQLNCLI10) SQL Server Native Client 10.0 OLE DB 提供程序(SQLNCLI10)

    • shipped with SQL Server 2008 SQL Server 2008 附带
    • must manually install on client PCs必须在客户端 PC 上手动安装
    • can connect to SQL Server 2000, 2005, 2008, and 2008 R2可以连接到 SQL Server 2000、2005、2008 和 2008 R2
  • SQL Server Native Client 11.0 OLE DB Provider (SQLNCLI11) SQL Server Native Client 11.0 OLE DB 提供程序(SQLNCLI11)

    • shipped with SQL Server 2012 SQL Server 2012 随附
    • must manually install on client PCs必须在客户端 PC 上手动安装
    • can connect to SQL Server 2005, 2008, 2008 R2, and 2012可以连接到 SQL Server 2005、2008、2008 R2 和 2012
    • will throw an error if used to connect to SQL Server 2000如果用于连接到 SQL Server 2000 将引发错误

Microsoft is going to cease creating new SQL Server Native Client OLEDB providers. Microsoft 将停止创建新的 SQL Server Native Client OLEDB提供程序。 All along they have been creating:一直以来,他们一直在创造:

  • SQL Native Client OLE DB provider SQL 本机客户端 OLE DB 提供程序
  • SQL Native Client ODBC provider SQL 本机客户端 ODBC 提供程序

They are going to stop creating the OLEDB provider drivers, while continuing the release the ODBC drivers.他们将停止创建 OLEDB 提供程序驱动程序,同时继续发布 ODBC 驱动程序。 Meanwhile, the original SQLOLEDB driver still exists (even in Windows 10).同时,原始的 SQLOLEDB 驱动程序仍然存在(即使在 Windows 10 中)。 You can continue to use ADO to access SQL Server.您可以继续使用 ADO 访问 SQL Server。 ADO is friendly wrapper around OLDDB (and ungainly beast of an API). ADO 是 OLDDB 的友好包装器(也是 API 的笨拙野兽)。

And inside OLE DB you can still use the old SQLOLEDB OLEDB driver.在 OLE DB 中,您仍然可以使用旧的SQLOLEDB OLEDB 驱动程序。

You can also use the OLE DB provider that wraps an ODBC driver (MSDASQL):您还可以使用包装 ODBC 驱动程序 (MSDASQL) 的 OLE DB 提供程序:

  • ADO ADO
    • OLEDB有机发光二极管
      • SQLOLEDB: Microsoft OLE DB Provider for SQL Server SQLOLEDB:用于 SQL Server 的 Microsoft OLE DB 提供程序
      • SQLNCLI: SQL Native Client 9.0 OLE DB Provider SQLNCLI:SQL Native Client 9.0 OLE DB 提供程序
      • SQLNCLI10: SQL Server Native Client 10.0 OLE DB Provider SQLNCLI10:SQL Server Native Client 10.0 OLE DB 提供程序
      • SQLNCLI11: SQL Server Native client 11.0 OLE DB Provider SQLNCLI11:SQL Server 本机客户端 11.0 OLE DB 提供程序
      • MSDASQL: Microsoft OLE DB Provider for ODBC Drivers MSDASQL:用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序
        • {SQL Server}: SQLSRV32.dll {SQL Server}:SQLSRV32.dll
        • {SQL Server Native Client 10.0}: sqlncli10.dll {SQL Server Native Client 10.0}:sqlncli10.dll
        • {SQL Server Native Client 11.0}: sqlncli11.dll {SQL Server Native Client 11.0}:sqlncli11.dll

If you do move away from the old SQLOLEDB provider, and towards the ODBC drivers, you do have to beware of a subtle gotcha:如果您确实从旧的 SQLOLEDB 提供程序转向 ODBC 驱动程序,则必须注意一个微妙的问题:

SQL Server does not support multiple open recordsets on one connection. SQL Server 不支持在一个连接上打开多个记录集。 For example, if you had some sort of master-detail:例如,如果您有某种主从:

sql := 'SELECT * FROM Orders';
qry := DatabaseHelper.Execute(sql);
while not qry.EOF do
begin
   //...

   //Oh, this order needs to be frobbed.
   DatabaseHelper.ExecuteNoRecords('UPDATE ORDERS SET Frob=1 WHERE OrderID='+IntToStr(orderID));

   qry.Next;
end;

You've just tried to do a second thing on a connection where a recordset is still being iterated.您刚刚尝试在记录集仍在迭代的连接上做第二件事。 SQL Server doesn't support that. SQL Server 不支持。 Fortunately the OLEDB provider knows this, and will silently open a second connection for you (a new spid and everything) to perform the action.幸运的是,OLEDB 提供程序知道这一点,并且会默默地为您打开第二个连接(一个新的spid和所有内容)来执行操作。

The ODBC drivers have no such helping hand. ODBC 驱动程序没有这样的帮助。 If you switch to using the ODBC driver, and didn't realize you have these subtle "issues" , your app will very quickly fall over dead.如果您改用 ODBC 驱动程序,并且没有意识到您有这些微妙的“问题” ,您的应用程序将很快崩溃。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM