微软已宣布弃用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
答案 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 Native Client 10.0 OLE DB提供程序(SQLNCLI10)
SQL Server Native Client 11.0 OLE DB提供程序(SQLNCLI11)
Microsoft将停止创建新的SQL Server Native Client OLEDB 提供程序。他们一直在创造:
他们将停止创建OLEDB提供程序驱动程序,同时继续发布ODBC驱动程序。同时,原始的SQLOLEDB驱动程序仍然存在(即使在Windows 10中)。您可以继续使用ADO访问SQL Server。 ADO是OLDDB的友好包装器(也是API的难以置信的野兽)。
在OLE DB中,您仍然可以使用旧的 SQLOLEDB OLEDB驱动程序。
您还可以使用包装ODBC驱动程序的OLE DB提供程序(MSDASQL):
如果您确实从旧的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驱动程序,并且没有意识到您有这些微妙的“问题”,那么您的应用程序很快就会崩溃。