1

我想Always Encrypted使用SQL Server 2016 SP1. 为了做到这一点,我需要使用新的ODBC Driver 13.1 for SQL Server而不是当前的sqloledb

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

为了利用 SQL Server 2005 中引入的新功能,例如多个活动结果集 (MARS)、查询通知、用户定义类型 (UDT) 或新的 xml 数据类型,使用 ActiveX 数据对象 (ADO) 的现有应用程序) 应使用 SQL Server Native Client OLE DB 提供程序作为其数据访问提供程序。

那么,这就是说我需要重写代码,XML用在哪里呢?

我知道,Microsoft已弃用已弃用的sqloledb驱动程序,但 2018 年 3 月推出的第一个版本将不支持Always Encrypted- 所以,我不想等待。

4

1 回答 1

2

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

较新的 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 连接字符串关键字时,提供程序将以 adLongVarWChar 形式返回 XML 数据。

不幸的是,ODBC 驱动程序没有等效的 DataTypeCompatibility 连接字符串关键字。当通过用于 ODBC 驱动程序的经典 ADO 使用的 MSDASQL 提供程序访问时,较新的 ODBC 驱动程序将 XML 数据返回为 ADO 类型 adLongVarBinary (205)。因此,XML 需要在 SQL 查询中转换为 nvarchar(MAX) 或从客户端转换为 adLongVarBinary 值。

我不能说尚未发布的用于 SQL Server 的 Microsoft OLE DB 驱动程序是否会通过支持 DataTypeCompatibility 关键字来提供缓解,但我希望它确实如此,类似于 Native Client。希望我们很快就会知道更多细节。我怀疑 ADO 是否会被加强以支持较新的 SQL 类型,因为它在过去 15 年中几乎没有被触及,但我之前错了。

于 2018-02-07T12:46:06.403 回答