我想在Always Encrypted
中使用SQL Server 2016 SP1
功能介绍。为此,我需要使用新的ODBC Driver 13.1 for SQL Server
而不是当前的sqloledb
。
似乎它正在破坏我的应用程序,例如,当返回XML
时。 Here,据说:
为了利用SQL Server中引入的新功能 2005年,如多个活动结果集(MARS),查询通知, 用户定义的类型(UDT),或新的xml数据类型,现有的 使用ActiveX数据对象(ADO)的应用程序应使用SQL 服务器本机客户端OLE DB提供程序作为其数据访问提供程序。
那么,这是否意味着我需要重写代码,使用XML
?
我知道,Microsoft undeprecated已弃用的sqloledb
驱动程序,但它的第一个版本将于2018年3月发布,不支持Always Encrypted
- 所以,我不想等待。
答案 0 :(得分:1)
Classic ADO没有SQL Server XML类型的概念。旧版SQLOLEDB提供程序和旧版SQL Server ODBC驱动程序返回类型为adLongVarWChar(203)的XML,因此它是客户端的字符串。
较新的SQL Server Native Client OLE DB提供程序将XML的类型141返回给ADO,但是没有匹配的ADO DataTypeEnum(https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/datatypeenum)。当为ADO兼容性指定DataTypeCompatibility = 80连接字符串关键字时,提供程序将返回XML数据作为adLongVarWChar。
不幸的是,ODBC驱动程序没有等效的DataTypeCompatibility连接字符串关键字。当通过经典ADO用于ODBC驱动程序的MSDASQL提供程序访问时,较新的ODBC驱动程序将XML数据作为ADO类型adLongVarBinary(205)返回。因此,XML需要在SQL查询中转换为nvarchar(MAX),或者在客户端转换为adLongVarBinary值。
我不能说,如果尚未发布的SQL Server的Microsoft OLE DB驱动程序将通过支持DataTypeCompatibility关键字来提供缓解,但我希望它与Native Client类似。希望我们能尽快了解更多细节。我怀疑ADO会加强支持更新的SQL类型,因为它在过去15年里几乎没有被触及,但我以前错了。