Переключение с sqloledb на драйвер odbc 13 для SQL Server

Я хочу использовать Always Encrypted особенность ввести в SQL Server 2016 SP1, Для этого мне нужно использовать новый ODBC Driver 13.1 for SQL Server вместо текущего sqloledb,

Кажется, это нарушает мое приложение, например, когда XML возвращается Здесь сказано, что:

Чтобы воспользоваться новыми функциями, представленными в SQL Server 2005, такими как множественные активные наборы результатов (MARS), уведомления о запросах, пользовательские типы (UDT) или новый тип данных xml, существующие приложения, использующие объекты данных ActiveX (ADO)) должен использовать поставщика OLE DB для собственного клиента SQL Server в качестве поставщика доступа к данным.

Итак, это означает, что мне нужно переписать код, где XML используется?

Я знаю, что Microsoft устарела как устаревшая sqloledb драйвер, но его первая версия, появившаяся в марте 2018 года, не будет поддерживать Always Encrypted - Итак, я не хочу ждать.

2 ответа

Решение

Классический ADO не имеет представления о типе XML SQL Server. Устаревший поставщик SQLOLEDB и унаследованный драйвер ODBC для SQL Server возвращают тип adLongVarWChar (203) для XML, поэтому это строка на стороне клиента.

Более новый поставщик OLE DB для собственного клиента SQL Server возвращает тип 141 для XML в ADO, но соответствующий ADO DataTypeEnum отсутствует ( https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/datatypeenum). Поставщик возвратит данные XML как adLongVarWChar, если для совместимости с ADO указано ключевое слово строки подключения DataTypeCompatibility=80.

К сожалению, для драйверов ODBC нет эквивалентного ключевого слова строки подключения DataTypeCompatibility. Более новые драйверы ODBC возвращают данные XML в виде ADO типа adLongVarBinary (205) при доступе через поставщика MSDASQL, который классический ADO использует для драйверов ODBC. Таким образом, XML нужно будет преобразовывать в / из nvarchar(MAX) в запросах SQL или преобразовывать значение adLongVarBinary на стороне клиента.

Я не могу сказать, предоставит ли еще не выпущенный драйвер Microsoft OLE DB для SQL Server облегчение, поддерживая ключевое слово DataTypeCompatibility, но я надеюсь, что это так же, как и в Native Client. Надеюсь, скоро мы узнаем больше подробностей. Я сомневаюсь, что ADO будет усиленно поддерживать новые типы SQL изначально, поскольку за последние 15 лет его почти не трогали, но раньше я ошибался.

Я бы не стал использовать драйвер ODBC; в нем есть ряд ошибок, которые нельзя исправить .

Вместо этого вы должны использовать поддерживаемый в настоящее время MSOLEDBдрайвер: Драйвер Microsoft OLEDB для SQL Server

И вам нужно будет включить в свой ConnectionString:

DataTypeCompatibility=80

по причине Дэн сказал.

Другие вопросы по тегам