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

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (PDW)

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

Между драйвером OLE DB для SQL Server и компонентами доступа к данным MDAC существует несколько различий; начиная с Windows Vista, компоненты доступа к данным стали называться компонентами доступа к данным Windows, или Windows DAC. Хотя оба предоставляют собственный доступ к базам данных SQL Server, OLE DB Driver for 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 с OLE DB Driver for 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 для SQL Server подключен к SQL Server 2005 (9.x) и более поздним версиям, ошибка сервера 16947 возвращается в виде SQL_ERROR. Эта ошибка возникает, если при выполнении позиционированного обновления или удаления не удается обновить или удалить строку. При подключении к любой версии SQL Server ошибка сервера 16947 возвращается в виде предупреждения (SQL_SUCCESS_WITH_INFO).

  • Драйвер OLE DB для SQL Server реализует интерфейс IDBDataSourceAdmin; это необязательный интерфейс OLE DB, который ранее не реализовывался. При этом реализуется только метод CreateDataSource этого интерфейса. Эта функция будет удалена в будущей версии 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 с индексом и каталогом)

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

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

    • Завершение работы

    • Завершить

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

  • При подключении приложений 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) Изображение
    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