sql-server - ADO 与 OLE DB 有什么关系?

标签 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 一起工作并且永远不会工作?

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.

上下文

我们是一家德尔福商店。我们在 Delphi 7 和 BDE 上,并希望从 BDE 迁移出去,也可能迁移到 Delphi XE2 或更新版本。我们选择的 DBMS 是 Microsoft SQL Server。我们考虑转移到 ADO,但担心它在上述公告的背景下的 future 证明。

这样想关系可以吗? :

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

我是否正确理解 Microsoft 想要迁移到?:

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

最佳答案

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

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

    这是操作系统本身附带的 SQL Server 2000 时代 OLEDB 提供程序。

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

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

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

    • 随 SQL Server 2012 一起提供
    • 必须在客户端电脑上手动安装
    • 可以连接到 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 驱动程序 (MSDASQL) 的 OLE DB 提供程序:

  • 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 驱动程序没有这样的 helper 。如果您转而使用 ODBC 驱动程序,并且没有意识到您有这些微妙的“问题”,您的应用程序将很快崩溃。

关于sql-server - ADO 与 OLE DB 有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35889168/

相关文章:

delphi - 右对齐delphi stringgrid列但保持主题绘图样式

c# - 如果存在则删除 SQL 表/如果不存在则创建(在 C# 中)

c++ - 读/写几个未知大小的结构到文件 C++

php - 如何将查询结果导出到csv文件?

sql - Oracle中的Select语句产生重复行

Delphi泛型嵌套类

delphi - DB 网格 - 我可以在第一行而不是第一列显示标题吗?

sql-server - SQL Server count() over() 与不同

sql-server - 执行 SQL 字符串并将结果插入表中

sql-server - 无法执行请求的操作,因为链接服务器 'MSOLAP' 的 OLE DB 提供程序 'SSAS' 不支持所需的接口(interface)