我想使用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
出于该原因的丹说。