从SQLOLEDB切换到SQL Server的ODBC驱动程序13



我想使用SQL Server 2016 SP1中引入的Always Encrypted功能。为此,我需要使用新的ODBC Driver 13.1 for SQL Server而代替当前的sqloledb

似乎正在打破我的应用程序,例如,当返回XML时。在这里,据说:

为了利用SQL Server中引入的新功能 2005年,例如多个活动结果集(火星(,查询通知, 用户定义的类型(UDT(或新的XML数据类型现有 使用ActiveX数据对象(ADO(的应用程序应使用SQL 服务器本地客户端OLE DB提供商作为其数据访问提供商。

那么,这就是这意味着我需要重写XML的代码?

我知道,Microsoft未经贬低的sqloledb驱动程序,但其第一个版本于2018年3月将不支持Always Encrypted-因此,我不想等待。

经典ADO没有SQL Server XML类型的概念。Legacy SQLOLEDB提供商和Legacy SQL Server ODBC驱动程序返回类型adlongvarwchar(203(XML,因此它是客户端的字符串。

新的SQL Server本地客户端OLE DB提供商将XML的类型141返回到ADO,但没有匹配的ADO DatatyPeenum(https://learn.microsoft.com/en-us/en-us/sql/sql/ado/ado/ado/reference/redo/ado-api/-DatatyPeenum(。当datatypeCompatibility = 80 Connection String关键字为ADO兼容时,提供商将返回XML数据为Adlongvarwchar。

不幸的是,ODBC驱动程序没有等效的数据型连接字符串关键字。较新的ODBC驱动程序通过MSDASQL提供商Classic ADO用于ODBC驱动程序访问时,将XML数据返回ADO类型Adlongvarbinary(205(。因此,XML将需要在SQL查询中送到/从NVarchar(Max(或在客户端转换的Adlongvarbinary值。

我不能说SQL Server未发行的Microsoft Ole DB驱动程序是否会通过支持DatatyPecatibility关键字来提供缓解,但我希望它能与本机客户端相似。希望我们很快就会知道更多细节。我怀疑Ado会得到加强以支持新的SQL类型,因为它在过去的15年中几乎没有被触摸过,但我以前错了。

我不会使用ODBC驱动程序;它有许多'wontfix" bugs。

相反,您应该使用当前支持的MSOLEDB驱动程序:SQL Server的Microsoft Ole DB驱动程序

,您必须在 ConnectionsTring 中包括

DataTypeCompatibility=80

出于该原因的丹说。

相关内容

  • 没有找到相关文章

最新更新