Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server ADO与OLE DB有什么关系? 问题: ADO与OLEDB有什么关系?这意味着什么 这是否意味着,如果我们切换到ADO,它将无法与SQL Server 2014一起工作,而且永远不会工作_Sql Server_Database_Delphi_Oledb_Ado - Fatal编程技术网

Sql server ADO与OLE DB有什么关系? 问题: ADO与OLEDB有什么关系?这意味着什么 这是否意味着,如果我们切换到ADO,它将无法与SQL Server 2014一起工作,而且永远不会工作

Sql server ADO与OLE DB有什么关系? 问题: ADO与OLEDB有什么关系?这意味着什么 这是否意味着,如果我们切换到ADO,它将无法与SQL Server 2014一起工作,而且永远不会工作,sql-server,database,delphi,oledb,ado,Sql Server,Database,Delphi,Oledb,Ado,Microsoft已宣布弃用SQL Server本机 客户端OLE DB提供程序,并且SQL Server 2012是最新版本 SQL Server以支持提供程序 上下文 我们是一家德尔福商店。我们使用的是Delphi 7和BDE,希望从BDE迁移,也可能迁移到Delphi XE2或更新版本。我们选择的数据库管理系统是Microsoft SQL Server。我们考虑转移到ADO,但担心它的未来证明在上述声明的背景下。 这种关系的想法行吗 Delphi <---> ADO <-

Microsoft已宣布弃用SQL Server本机 客户端OLE DB提供程序,并且SQL Server 2012是最新版本 SQL Server以支持提供程序

上下文 我们是一家德尔福商店。我们使用的是Delphi 7和BDE,希望从BDE迁移,也可能迁移到Delphi XE2或更新版本。我们选择的数据库管理系统是Microsoft SQL Server。我们考虑转移到ADO,但担心它的未来证明在上述声明的背景下。 这种关系的想法行吗

Delphi <---> ADO <---> OLE DB <---> DBMS
Delphi ADO OLE DB数据库管理系统 我是否正确理解Microsoft希望迁移到:

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

他们的意思是不再创建SQL Server本机客户端OLEDB提供程序。有许多OLE DB提供程序可用于访问SQL Server:

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

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

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

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

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

    • SQL Server 2012随附
    • 必须在客户端PC上手动安装
    • 可以连接到SQL Server 2005、2008、2008 R2和2012
    • 如果用于连接SQL Server 2000,将引发错误
Microsoft将停止创建新的SQL Server本机客户端OLEDB提供程序。他们一直在创造:

  • SQL本机客户端OLE DB提供程序
  • SQL本机客户端ODBC提供程序
他们将停止创建OLEDB提供程序驱动程序,同时继续发布ODBC驱动程序。同时,原始的SQLOLEDB驱动程序仍然存在(即使在Windows10中)。您可以继续使用ADO访问SQL Server。ADO是OLDDB(和笨拙的API野兽)的友好包装器

在OLEDB内部,您仍然可以使用旧的SQLOLEDBOLEDB驱动程序

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

  • 阿多
    • 有机发光二极管
      • SQLOLEDB:用于SQL Server的Microsoft OLE DB提供程序
      • SQLNCLI:SQL本机客户端9.0 OLE DB提供程序
      • SQLNCLI10:SQL Server本机客户端10.0 OLE DB提供程序
      • SQLNCLI11:SQL Server本机客户端11.0 OLE DB提供程序
      • MSDASQL:用于ODBC驱动程序的Microsoft OLE DB提供程序
        • {SQL Server}:SQLSRV32.dll
        • {SQL Server本机客户端10.0}:sqlncli10.dll
        • {SQL Server本机客户端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驱动程序,但没有意识到你有这些微妙的“问题”,你的应用程序很快就会死掉。

你担心自己是未来的证明,而你却在使用Delphi 7和BDE?获取Delphi 10,迁移到FireDac并完成它。我觉得BDE->FireDac实际上相当无痛,甚至比BDE->ADO更简单。为什么要迁移到XE2?这似乎很疯狂-如果你要升级,那么升级。为什么中途停下来?无论如何,根据您的问题,MS希望您继续使用ODBC。BDE、ADO和FireDac组件都可以通过ODBC进行连接,因此,无论您使用哪种组件,如果升级到SQL Server 2012之后,您都需要更改为ODBC,如果您还没有这样做的话。因为我们几年前购买了XE2,但最终没有在当时采取行动,现在就想切换。好吧,FireDac推出了XE6,将一项早已过时、将近30年历史的技术升级为一项17年历史的老化技术似乎很愚蠢,因为你可以直接跳到今天,一次付清所有技术债务。FireDAC是专有的,就像之前的BDE和介于两者之间的DBExpress一样。共同主题?当propietor决定继续前进时,你必须继续前进,否则就会陷入困境(贬低是提高收入的好方法,迫使客户升级)。我会避免使用Delphi特定的数据访问技术,除非您绝对被迫使用它,例如用于跨平台的FMX支持。使用“原始”ADO或ODBC或多种包装器之一。只有OLEDB的SQL Server本机客户端不推荐使用。您仍然可以通过ADO、ODBC或其他提供程序使用SQL Server。