对于SQL Server,从sqloledb切换到odbc驱动程序13

时间:2018-02-07 10:02:21

标签: sql-server asp-classic odbc always-encrypted sqloledb

我想在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 - 所以,我不想等待。

1 个答案:

答案 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年里几乎没有被触及,但我以前错了。