Обновление приложения с переходом от компонентов MDAC к собственному клиенту SQL Server
Существует ряд различий между SQL Server Native Client и компонентами доступа к данным Майкрософт (MDAC; начиная с Windows Vista компоненты доступа к данным теперь называются компонентами доступа к данным Windows или Windows DAC). Хотя оба предоставляют собственный доступ к данным для SQL Server баз данных, SQL Server Native Client специально разработаны для предоставления новых возможностей SQL Server 2005, в то же время сохраняя обратную совместимость с более ранними версиями.
Сведения в этом разделе помогут обновить приложение MDAC (или windows DAC) до актуальной версии SQL Server Native Client, включенной в SQL Server 2005. Сведения о том, как сделать это приложение актуальным с версией SQL Server Native Client, поставляемой в SQL Server 2014 г., см. в статье Обновление приложения с SQL Server 2005 Native Client.
Кроме того, хотя MDAC содержит компоненты для использования OLE DB, ODBC и объектов данных ActiveX (ADO), SQL Server Native Client реализует только OLE DB и ODBC (хотя ADO может получить доступ к функциям SQL Server Native Client).
SQL Server Native Client и MDAC отличаются в следующих областях:
Пользователи, использующие ADO для доступа к поставщику SQL Server Native Client, могут найти меньше возможностей фильтрации, чем при обращении к поставщику SQL OLE DB.
Если приложение ADO использует SQL Server Native Client и пытается обновить вычисляемый столбец, будет сообщено об ошибке. При использовании компонентов MDAC обновление было бы принято, но пропущено.
SQL Server Native Client — это отдельный файл автономной библиотеки динамической компоновки (DLL). Количество интерфейсов с открытым доступом сведено к минимуму, чтобы упростить распространение, а также повысить уровень безопасности.
Поддерживаются только интерфейсы OLE DB и ODBC.
Имена SQL Server Native Client поставщика OLE DB и драйвера ODBC отличаются от имен, используемых с MDAC.
Доступные пользователям функции, предоставляемые компонентами MDAC, доступны при использовании SQL Server Native Client. К ним помимо прочего относится создание пулов соединений, поддержка ADO и поддержка клиентских курсоров. При использовании любой из этих функций SQL Server Native Client обеспечивает только подключение к базе данных. Компоненты MDAC предоставляют такие функции, как трассировка, элементы управления в интерфейсе управления и счетчики производительности.
Приложения могут использовать основные службы OLE DB с SQL Server Native Client, но при использовании обработчика курсоров OLE DB они должны использовать параметр совместимости типов данных, чтобы избежать потенциальных проблем, которые могут возникнуть из-за того, что обработчик курсоров не знаком с новыми типами данных SQL Server 2005.
SQL Server Native Client поддерживает доступ к предыдущим базам данных SQL Server.
SQL Server Native Client не содержит интеграцию XML. SQL Server Native Client поддерживает select ... ЗАПРОСы FOR XML, но не поддерживают другие функции XML. Однако SQL Server Native Client поддерживает тип данных, представленный
xml
в SQL Server 2005 году.SQL Server Native Client поддерживает настройку клиентских сетевых библиотек с использованием только атрибутов строки подключения. Если требуется провести более сложную настройку сетевых библиотек, необходимо использовать диспетчер конфигурации SQL Server.
SQL Server Native Client несовместим с odbcbcp.dll. Приложения, использующие API ODBC и bcp, необходимо перестроить для связи с sqlncli11.lib, чтобы использовать SQL Server Native Client.
SQL Server Native Client не поддерживается поставщиком MICROSOFT OLE DB для ODBC (MSDASQL). Если вы используете драйвер MDAC SQLODBC с MSDASQL или драйвер MDAC SQLODBC с ADO, используйте OLE DB в SQL Server Native Client..
Строки подключения MDAC допускают логическое значение (
true
) для ключевое слово Trusted_Connection. Строка подключения SQL Server Native Client должна использоватьyes
или нет.Незначительные изменения внесены в предупреждения и ошибки. Предупреждения и ошибки, возвращаемые сервером, теперь сохраняют тот же уровень серьезности при передаче в SQL Server Native Client. Следует тщательно протестировать приложение, если его работа зависит от перехвата определенных предупреждений и ошибок.
SQL Server Native Client выполняет более строгую проверку ошибок, чем MDAC. Это означает, что некоторые приложения, которые не соответствуют спецификациям ODBC и OLE DB, могут вести себя по-разному. Например, поставщик SQLOLEDB не применял правило, которое должно начинаться с @для результирующих параметров, но SQL Server Native Client поставщик OLE DB.
SQL Server Native Client поведение отличается от MDAC в отношении неудачных подключений. Например, MDAC возвращает кэшированные значения свойств для соединения, которое завершилось сбоем, в то время как SQL Server Native Client сообщает об ошибке вызывающей приложению.
SQL Server Native Client не создает события анализатора Visual Studio, а создает события трассировки Windows.
SQL Server Native Client нельзя использовать с perfmon. Системный монитор — это средство Windows, которое можно использовать только для файлов DSN, которые используют драйвер MDAC SQLODBC, входящий в Windows.
При подключении SQL Server Native Client к SQL Server 2005 и более поздним версиям возвращается ошибка сервера 16947 в виде SQL_ERROR. Эта ошибка возникает, если при выполнении позиционированного обновления или удаления не удается обновить или удалить строку. При использовании компонентов MDAC для соединения с любой версией SQL Server ошибка сервера 16947 возвращается в виде предупреждения (SQL_SUCCESS_WITH_INFO).
SQL Server Native Client реализует интерфейс IDBDataSourceAdmin, который является необязательным интерфейсом OLE DB, который ранее не был реализован, но реализуется только метод CreateDataSource этого необязательного интерфейса. В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
Поставщик SQL SERVER NATIVE CLIENT OLE DB возвращает синонимы в таблицах и TABLE_INFO наборах строк схемы, а для TABLE_TYPE задано значение SYNONYM.
Возвращаемые значения типа
varchar(max)
данных ,nvarchar(max)
,varbinary(max)
,xml
,udt
или других типов больших объектов не могут быть возвращены клиентским версиям, предшествующим SQL Server 2005. Если вы хотите использовать эти типы в качестве возвращаемых значений, необходимо использовать SQL Server Native Client.MDAC позволяет выполнять следующие инструкции в начале ручных и неявных транзакций, но SQL Server Native Client — нет. Они должны выполняться в режиме автоматической фиксации.
Все полнотекстовые операции (операции DDL с индексом и каталогом)
Все операции с базой данных (создание базы данных, изменение базы данных, удаление базы данных)
Перенастройка
Shutdown
Завершить
Резервное копирование
Когда приложения MDAC подключаются к SQL Server, типы данных, представленные в SQL Server 2005, будут отображаться как типы данных, совместимые с SQL Server 2000, как показано в следующей таблице.
Тип SQL Server 2005 Тип SQL Server 2000 varchar(max)
text
nvarchar(max)
ntext
varbinary(max)
image
udt
varbinary
xml
ntext
Это сопоставление типов затрагивает значения, возвращаемые для метаданных столбцов. Например, максимальный
text
размер столбца составляет 2 147 483 647, но SQL Server Native Client ODBC сообщает максимальный размерvarchar(max)
столбцов как SQL_SS_LENGTH_UNLIMITED, а SQL Server Native Client OLE DB —varchar(max)
2 147 483 647 или -1 в зависимости от платформы.SQL Server Native Client допускает неоднозначность в строках подключения (например, некоторые ключевые слова могут быть указаны несколько раз, а конфликтующие ключевые слова могут быть разрешены с разрешением на основе позиции или приоритета) из соображений обратной совместимости. Будущие выпуски SQL Server Native Client могут не допускать неоднозначности в строках подключения. Рекомендуется изменять приложения для использования SQL Server Native Client, чтобы исключить любую зависимость от неоднозначности строки подключения.
Если вы используете вызов ODBC или OLE DB для запуска транзакций, между SQL Server Native Client и MDAC существует разница в поведении. Транзакции начнутся сразу с SQL Server Native Client, но транзакции начнутся после первого доступа к базе данных с помощью MDAC. Это может повлиять на поведение хранимых процедур и пакетов, так как в SQL Server требуется, чтобы значение @@TRANCOUNT после выполнения хранимой процедуры или пакета было таким же, как на момент запуска пакета или хранимой процедуры.
При использовании SQL Server Native Client ITransactionLocal::BeginTransaction приведет к немедленному запуску транзакции. При использовании компонентов MDAC запуск транзакции задерживается до выполнения приложением инструкции, которой требуется транзакция в неявном режиме. Дополнительные сведения см. в статье SET IMPLICIT_TRANSACTIONS (Transact-SQL).
При использовании драйвера SQL Server Native Client с System.Data.Odbc для доступа к компьютеру сервера SQL Server, который предоставляет новые SQL Server типы данных или функции, могут возникнуть ошибки. System.Data.Odbc предоставляет универсальную реализацию ODBC и впоследствии не предоставляет функциональные возможности или расширения для конкретных поставщиков. (Драйвер SQL Server Native Client обновлен для поддержки последних SQL Server функций.) Чтобы обойти эту проблему, можно либо отменить изменения в MDAC, либо выполнить миграцию в System.Data.SqlClient.
И SQL Server Native Client, и MDAC поддерживают изоляцию зафиксированных транзакций чтения с помощью управления версиями строк, но только SQL Server Native Client поддерживает изоляцию транзакций snapshot. (С точки зрения программирования уровень изоляции транзакций READ COMMITTED с управлением версиями строк представляет собой то же, что и транзакция READ COMMITTED.)
См. также:
Построение приложений с использованием SQL Server Native Client