ADO如何与OLE DB相关?

时间:2016-03-09 10:37:43

标签: sql-server database delphi oledb ado

问题

  1. ADO如何与OLE DB相关,annoucement of Microsoft to drop OLE DB Providers for SQL Server是什么意思?
  2. 这是否意味着如果我们切换到ADO,它将无法与SQL Server 2014一起使用,从不?
  3.   

    微软已宣布弃用SQL Server Native   客户端OLE DB提供程序,SQL Server 2012是最后一个版本   SQL Server支持提供程序。

    上下文

    我们是德尔福商店。我们使用的是Delphi 7和BDE,并希望从BDE迁移,也可能转移到Delphi XE2或更新版本。我们选择的DBMS是Microsoft SQL Server。我们考虑转向ADO,但担心上述公告背景下的未来证据。

    关于这种关系的想法是否正确? :

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

    我是否理解微软想要转移到?:

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

1 个答案:

答案 0 :(得分:0)

他们的意思是他们将不再创建SQL Server Native Client OLEDB Provider。您可以使用许多OLE DB提供程序来访问SQL Server:

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

    这是随操作系统本身提供的SQL Server 2000时代的OLEDB Provider。

  • SQL Native Client 9.0 OLE DB提供程序(SQLNCLI)

    • 随SQL Server 2005一起提供
    • 必须在客户端PC上手动安装
    • 可以连接到SQL Server 7,2000和2005
    • 可以连接到SQL Server 2008,但他们建议您使用新的本机客户端
  • SQL Server Native Client 10.0 OLE DB提供程序(SQLNCLI10)

    • 随SQL Server 2008一起提供
    • 必须在客户端PC上手动安装
    • 可以连接到SQL Server 2000,2005,2008和2008 R2
  • SQL Server Native Client 11.0 OLE DB提供程序(SQLNCLI11)

    • 随SQL Server 2012一起提供
    • 必须在客户端PC上手动安装
    • 可以连接到SQL Server 2005,2008,2008 R2和2012
    • 如果用于连接到SQL Server 2000,
    • 将抛出错误

Microsoft将停止创建新的SQL Server Native Client OLEDB 提供程序。他们一直在创造:

  • SQL Native Client OLE DB提供程序
  • SQL Native Client ODBC提供程序

他们将停止创建OLEDB提供程序驱动程序,同时继续发布ODBC驱动程序。同时,原始的SQLOLEDB驱动程序仍然存在(即使在Windows 10中)。您可以继续使用ADO访问SQL Server。 ADO是OLDDB的友好包装器(也是API的难以置信的野兽)。

在OLE DB中,您仍然可以使用旧的 SQLOLEDB OLEDB驱动程序。

您还可以使用包装ODBC驱动程序的OLE DB提供程序(MSDASQL):

  • ADO
    • OLEDB
      • SQLOLEDB:用于SQL Server的Microsoft OLE DB提供程序
      • SQLNCLI:SQL Native Client 9.0 OLE DB提供程序
      • SQLNCLI10:SQL Server Native Client 10.0 OLE DB提供程序
      • SQLNCLI11:SQL Server Native客户端11.0 OLE DB提供程序
      • MSDASQL:用于ODBC驱动程序的Microsoft OLE DB提供程序
        • {SQL Server}:SQLSRV32.dll
        • {SQL Server Native Client 10.0}:sqlncli10.dll
        • {SQL Server Native Client 11.0}:sqlncli11.dll

如果您确实从旧的SQLOLEDB提供程序转移到ODBC驱动程序,那么您必须要注意一个微妙的问题:

SQL Server不支持一个连接上的多个打开记录集。例如,如果您有某种主要细节:

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;

你刚刚尝试在记录集仍在迭代的连接上做第二件事。 SQL Server不支持这一点。幸运的是,OLEDB提供商知道这一点,并且默默地为您打开第二个连接(一个新的spid和所有内容)来执行操作。

ODBC驱动程序没有这样的帮助。如果您切换到使用ODBC驱动程序,并且没有意识到您有这些微妙的“问题”,那么您的应用程序很快就会崩溃。