Обновление приложения с переходом от MDAC на драйвер OLE DB для SQL Server

Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)

Скачать драйвер OLE DB

Между драйвером OLE DB для SQL Server и компонентами доступа к данным MDAC существует несколько различий; начиная с Windows Vista, компоненты доступа к данным стали называться компонентами доступа к данным Windows, или Windows DAC. Хотя оба варианта реализуют низкоуровневый доступ к базам данных SQL Server, драйвер OLE DB для SQL Server предоставляет новые функции SQL Server особым образом, обеспечивая в то же время обратную совместимость с ранними версиями.

Кроме того, хотя MDAC содержит компоненты для использования OLE DB, ODBC и объекты данных ActiveX (ADO), OLE DB Driver for SQL Server реализует только OLE DB (хотя ADO может получить доступ к функциональным возможностям OLE DB Driver for SQL Server).

OLE DB Driver for SQL Server и компоненты MDAC различаются также в следующих областях.

  • Пользователи, использующие объекты ADO для доступа к OLE DB Driver for SQL Server, могут иметь в своем распоряжении меньше функций фильтрации, чем при доступе к поставщику SQL OLE DB.

  • Если в приложении ADO используется OLE DB Driver for SQL Server и предпринимается попытка обновить вычисляемый столбец, то появляется сообщение об ошибке. При использовании компонентов MDAC обновление было бы принято, но пропущено.

  • OLE DB Driver for SQL Server является одним автономным файлом DLL. Количество интерфейсов с открытым доступом сведено к минимуму, чтобы упростить распространение, а также повысить уровень безопасности.

  • Поддерживаются только интерфейсы OLE DB.

  • Имена OLE DB Driver for SQL Server отличаются от имен, которые используются в компонентах MDAC.

  • Доступные для пользователя функции, предоставляемые компонентами MDAC, можно использовать при работе с OLE DB Driver for SQL Server. К ним помимо прочего относится создание пулов соединений, поддержка ADO и поддержка клиентских курсоров. При использовании любой из этих функций OLE DB Driver for SQL Server обеспечивает только связь с базой данных. Компоненты MDAC предоставляют такие функции, как трассировка, элементы управления в интерфейсе управления и счетчики производительности.

  • Приложения могут использовать основные службы OLE DB в сочетании с драйвером OLD DB для SQL Server, но при использовании ядра курсора OLE DB в них должен быть установлен параметр совместимости типов данных во избежание потенциальных проблем, которые могут возникнуть в связи с тем, что в ядре курсора отсутствуют сведения о новых типах данных SQL Server 2005 (9.x).

  • OLE DB Driver for SQL Server поддерживает доступ к базам данных SQL Server предыдущих версий.

  • OLE DB Driver for SQL Server не содержит средств интеграции с XML. OLE DB Driver for SQL Server поддерживает запросы SELECT... FOR XML, но не поддерживает другие функции XML. Те не менее OLE DB Driver for SQL Server поддерживает тип данных XML, представленный в SQL Server 2005 (9.x).

  • Драйвер OLE DB для SQL Server поддерживает настройку сетевых библиотек на стороне клиента с использованием только атрибутов строки соединения. Если требуется провести более сложную настройку сетевых библиотек, необходимо использовать диспетчер конфигурации SQL Server.

  • Строки подключения компонентов MDAC позволяют использовать логическое значение (true) для ключевого слова Trusted_Connection. Строка подключения OLE DB Driver for SQL Server должна иметь значение yes или no.

  • Незначительные изменения внесены в предупреждения и ошибки. Теперь в передаваемых драйверу OLE DB для SQL Server предупреждениях и ошибках, которые возвращаются сервером, степень серьезности сохраняется без изменений. Следует тщательно протестировать приложение, если его работа зависит от перехвата определенных предупреждений и ошибок.

  • Проверка ошибок в драйвере OLE DB для SQL Server строже, чем в компонентах MDAC, а это означает, что некоторые приложения, которые не полностью соответствуют спецификациям OLE DB, могут работать по-разному. Например, в поставщике SQLOLEDB не требовалось соблюдение правила, по которому имена результирующих параметров должны начинаться с символа "@", а в драйвере OLE DB для SQL Server это требование применяется.

  • OLE DB Driver for SQL Server и компоненты MDAC по-разному реагируют на прерывание подключения. Например, компоненты MDAC возвращают кэшированные значения свойств разорванного соединения, тогда как драйвер OLE DB для SQL Server сообщает вызывающему приложению об ошибке.

  • Драйвер OLE DB для SQL Server не формирует события Visual Studio Analyzer; вместо них он формирует события трассировки Windows.

  • OLE DB Driver for SQL Server нельзя использовать с системным монитором Perfmon. Системный монитор — это средство Windows, которое можно использовать только для файлов DSN, которые используют драйвер MDAC SQLODBC, входящий в Windows.

  • Если OLE DB Driver for SQL Server подключен к SQL Server 2005 (9.x) и более поздних версий, то возврат ошибки сервера 16947 осуществляется в виде SQL_ERROR. Эта ошибка возникает, если при выполнении позиционированного обновления или удаления не удается обновить или удалить строку. При использовании компонентов MDAC для соединения с любой версией SQL Server ошибка сервера 16947 возвращается в виде предупреждения (SQL_SUCCESS_WITH_INFO).

  • Драйвер OLE DB для SQL Server реализует интерфейс IDBDataSourceAdmin; это необязательный интерфейс OLE DB, который ранее не реализовывался. При этом реализуется только метод CreateDataSource этого интерфейса. В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

  • Драйвер OLE DB для SQL Server возвращает синонимы в наборах строк схемы TABLES и TABLE_INFO, при этом параметру TABLE_TYPE присваивается значение SYNONYM.

  • Значения типов данных varchar(max) , nvarchar(max) , varbinary(max) , xml, udt или других типов больших объектов невозможно возвратить клиенту с версией ниже SQL Server 2005 (9.x). Если эти типы должны служить в качестве возвращаемых значений, необходимо использовать OLE DB Driver for SQL Server.

  • Компоненты MDAC позволяют выполнять следующие инструкции при запуске ручных или неявных транзакций, а драйвер OLE DB для SQL Server — нет. Они должны выполняться в режиме автоматической фиксации.

    • Все полнотекстовые операции (операции DDL с индексом и каталогом)

    • Все операции с базой данных (создание базы данных, изменение базы данных, удаление базы данных)

    • Перенастройка

    • Shutdown

    • Завершить

    • Резервное копирование

  • При подключении приложений MDAC к SQL Server типы данных, представленные в SQL Server 2005 (9.x), будут отображаться как типы данных, совместимые с SQL Server 2000 (8.x), как показано в следующей таблице.

    Тип SQL Server 2005 Тип SQL Server 2000
    varchar(max) text
    nvarchar(max) ntext
    varbinary(max) image
    udt varbinary
    xml ntext

    Это сопоставление типов затрагивает значения, возвращаемые для метаданных столбцов. Например, максимальный размер текстового столбца — 2 147 483 647, а OLE DB Driver for SQL Server сообщает максимальный размер столбцов varchar (max) в виде 2 147 483 647 или -1 в зависимости от платформы.

  • В драйвере OLE DB для SQL Server в целях обеспечения обратной совместимости допускается неоднозначность в строках соединений (например, некоторые ключевые слова могут быть указаны несколько раз, допускается также использование конфликтующих ключевых слов; при этом разрешение конфликтов происходит с учетом позиции или приоритета). В следующих версиях OLE DB Driver for SQL Server неоднозначность в строках подключения может стать недопустимой. При изменении приложения для работы с драйвером OLE DB для SQL Server необходимо предусмотреть устранение любых зависимостей от неоднозначности строки соединения.

  • Если запустить транзакции с помощью вызова OLE DB, OLE DB Driver for SQL Server и компоненты MDAC ведут себя по-разному. При работе с OLE DB Driver for SQL Server транзакции запускаются немедленно, а при использовании компонентов MDAC запуск транзакций происходит только после первого доступа к базе данных. Это может повлиять на поведение хранимых процедур и пакетов, так как в SQL Server требуется, чтобы значение @@TRANCOUNT после выполнения хранимой процедуры или пакета было таким же, как на момент запуска пакета или хранимой процедуры.

  • При использовании OLE DB Driver for SQL Server вызов ITransactionLocal::BeginTransaction приведет к немедленному запуску транзакции. При использовании компонентов MDAC запуск транзакции задерживается до выполнения приложением инструкции, которой требовалась транзакция в неявном режиме. Дополнительные сведения см. в статье SET IMPLICIT_TRANSACTIONS (Transact-SQL).

OLE DB Driver for SQL Server и компоненты MDAC поддерживают изоляцию транзакций уровня READ COMMITTED через управление версиями строк, но только OLE DB Driver for SQL Server поддерживает изоляцию транзакций уровня моментальных снимков. (С точки зрения программирования уровень изоляции транзакций READ COMMITTED с управлением версиями строк представляет собой то же, что и транзакция READ COMMITTED.)

См. также:

Создание приложений с помощью драйвера OLE DB для SQL Server