Обновление приложения с переходом от компонентов MDAC к собственному клиенту SQL Server
Между собственным клиентом SQL Server и компонентами доступа к данным (Майкрософт) (MDAC) существует несколько различий; начиная с Windows Vista, компоненты доступа к данным стали называться компонентами доступа к данным Windows, или Windows DAC. Хотя обе программы реализуют собственный доступ к базам данных SQL Server, собственный клиент SQL Server использует новые функции SQL Server 2005 особым образом, обеспечивая в то же время обратную совместимость с ранними версиями.
Приведенные в этом разделе сведения помогут вам обновить приложения компонентов MDAC (или выделенное административное соединение Windows) до текущей версии собственного клиента SQL Server, который входит в состав SQL Server 2005. Сведения об обновлении приложений до текущей версии собственного клиента SQL Server, поставляемого в SQL Server 2008 R2, см. в разделе Обновление приложения при переходе от собственного клиента SQL Server 2005 к собственному клиенту SQL Server 2008 R2.
Кроме того, в компоненты MDAC входят компоненты для использования OLE DB, ODBC и объектов ADO, а собственный клиент SQL Server реализует только интерфейсы OLE DB и ODBC (хотя объекты ADO могут использовать функции собственного клиента SQL Server).
Собственный клиент SQL Server и компоненты MDAC различаются также в следующих областях.
Пользователи, использующие объекты ADO для доступа к поставщику собственного клиента SQL Server, могут иметь в своем распоряжении меньше функций фильтрации, чем при доступе к поставщику SQL OLE DB.
Если в приложении ADO используется собственный клиент SQL Server и предпринимается попытка обновить вычисляемый столбец, то появляется сообщение об ошибке. При использовании компонентов MDAC обновление было бы принято, но пропущено.
Собственный клиент SQL Server является одним автономным файлом DLL. Количество интерфейсов с открытым доступом сведено к минимуму, чтобы упростить распространение, а также повысить уровень безопасности.
Поддерживаются только интерфейсы OLE DB и ODBC.
Поставщик OLE DB и драйвер ODBC собственного клиента SQL Server имеют имена, отличные от тех, которые используются в компонентах MDAC.
Доступные для пользователя функции, предоставляемые компонентами MDAC, можно использовать при работе с собственным клиентом SQL Server. Эти функции включают, но не ограничиваются следующими: создание пулов соединений, поддержка объектов ADO и поддержка клиентских курсоров. При использовании любой из этих функций собственный клиент SQL Server обеспечивает только связь с базой данных. Компоненты MDAC предоставляют такие функции, как трассировка, элементы управления в интерфейсе управления и счетчики производительности.
Приложения могут использовать основные службы OLE DB в сочетании с собственным клиентом SQL Server, однако при использовании ядра курсора OLE DB в них должен быть установлен параметр совместимости типов данных во избежание потенциальных проблем, которые могут возникнуть в связи с тем, что в ядре курсора отсутствуют сведения о новых типах данных SQL Server 2005.
Собственный клиент SQL Server поддерживает доступ к базам данных SQL Server предыдущих версий, начиная с SQL Server 7.0 и более новых версий.
Собственный клиент SQL Server не содержит средств интеграции с XML. Собственный клиент SQL Server поддерживает запросы SELECT … FOR XML и не поддерживает какие-либо другие функции XML. Однако собственный клиент SQL Server поддерживает тип данных xml, представленный в SQL Server 2005.
Собственный клиент SQL Server поддерживает настройку сетевых библиотек на стороне клиента с использованием только атрибутов строки соединения. Если требуется провести более сложную настройку сетевых библиотек, необходимо использовать диспетчер конфигурации SQL Server.
Собственный клиент SQL Server несовместим с odbcbcp.dll. Приложения, которые используют и ODBC, и API bcp, необходимо перестроить и добавить связь с файлом sqlncli10.lib, чтобы они могли использовать собственный клиент SQL Server.
Собственный клиент SQL Server не поддерживается из поставщика Microsoft OLE DB для ODBC (MSDASQL). При использовании драйвера MDAC SQLODBC вместе с MSDASQL или драйвера MDAC SQLODBC вместе с ADO используйте OLE DB в собственном клиенте SQL Server.
Строка соединения MDAC поддерживает логическое значение (true) для ключевого слова Trusted_Connection. В строках соединения собственного клиента SQL Server должны указываться значения yes или no.
Незначительные изменения внесены в предупреждения и ошибки. Теперь в передаваемых собственному клиенту SQL Server предупреждениях и ошибках, которые возвращаются сервером, сохраняется такая же степень серьезности. Следует тщательно протестировать приложение, если его работа зависит от перехвата определенных предупреждений и ошибок.
Проверка ошибок в собственном клиенте SQL Server строже, чем в компонентах MDAC, а это означает, что некоторые приложения, которые не полностью соответствуют спецификациям ODBC и OLE DB, могут работать по-разному. Например, в поставщике SQLOLEDB не предусмотрено принудительное применение правила, согласно которому имена результирующих параметров должны начинаться с символа @, а в поставщике OLE DB собственного клиента SQL Server такое правило соблюдается.
Собственный клиент SQL Server и компоненты MDAC по-разному реагируют на разрыв соединения. Например, компоненты MDAC возвращают кэшированные значения свойств разорванного соединения, тогда как собственный клиент SQL Server сообщает вызывающему приложению об ошибке.
Собственный клиент SQL Server не формирует события Visual Studio Analyzer, вместо них он формирует события трассировки Windows.
Собственный клиент SQL Server невозможно использовать с системным монитором. Системный монитор — это средство Windows, которое можно использовать только для файлов DSN, которые используют драйвер MDAC SQLODBC, входящий в Windows.
Если собственный клиент SQL Server подключен к SQL Server 2005, то возврат ошибки сервера 16947 осуществляется в виде SQL_ERROR. Эта ошибка возникает, если при выполнении позиционированного обновления или удаления не удается обновить или удалить строку. При использовании SQL Server 2000 или более ранней версии, а также при использовании компонентов MDAC для соединения с любой версией SQL Server ошибка сервера 16947 возвращается в виде предупреждения (SQL_SUCCESS_WITH_INFO).
Собственный клиент 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. Если эти типы должны служить в качестве возвращаемых значений, необходимо использовать собственный клиент SQL Server.
Компоненты MDAC позволяют выполнять следующие инструкции при запуске ручных или неявных транзакций, а собственный клиент SQL Server — нет. Они должны выполняться в режиме автоматической фиксации.
Все полнотекстовые операции (операции DDL с индексом и каталогом)
Все операции с базой данных (создание базы данных, изменение базы данных, удаление базы данных)
Повторная настройка
Завершение
Удаление
Backup
При подключении приложений 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 сообщает, что максимальный размер столбцов varchar(max) равен SQL_SS_LENGTH_UNLIMITED, а OLE DB собственного клиента SQL Server сообщает, что максимальный размер столбцов varchar(max) равен 2 147 483 647 или -1, в зависимости от платформы.
В собственном клиенте SQL Server в целях обеспечения обратной совместимости допускается неоднозначность в строках соединений (например, некоторые ключевые слова могут быть указаны несколько раз, а также может допускаться использование конфликтующих ключевых слов; при этом разрешение конфликтов происходит с учетом позиции или приоритета). В следующих версиях собственного клиента SQL Server неоднозначность в строках соединения может стать недопустимой. При изменении приложения для работы с собственным клиентом SQL Server необходимо предусмотреть устранение любых зависимостей от неоднозначности строки соединения.
При запуске транзакций с помощью вызова ODBC или OLE DB собственный клиент SQL Server и компоненты MDAC ведут себя по-разному; при работе с собственным клиентом SQL Server транзакции запускаются немедленно, а при использовании компонентов MDAC запуск транзакций происходит только после первого доступа к базе данных. Это может повлиять на поведение хранимых процедур и пакетов, поскольку в SQL Server требуется, чтобы значение @@TRANCOUNT после завершения выполнения хранимой процедуры или пакета было таким же, как при запуске пакета или хранимой процедуры. Дополнительные сведения см. в разделе Откат и фиксация транзакций в хранимых процедурах и триггерах.
При использовании собственного клиента SQL Server метод ITransactionLocal::BeginTransaction вызывает немедленный запуск транзакции. При использовании компонентов MDAC запуск транзакции задерживается до выполнения приложением инструкции, которой требуется транзакция в неявном режиме. Дополнительные сведения см. в разделе SET IMPLICIT_TRANSACTIONS (Transact-SQL).
При использовании драйвера собственного клиента SQL Server с сущностью System.Data.Odbc для доступа к серверу SQL Server, на котором используются новые, характерные для SQL Server типы данных и функции, могут возникать ошибки. Сущность System.Data.Odbc предоставляет обычную реализацию ODBC и, соответственно, не предоставляет функции и расширения, характерные для поставщика. (Драйвер собственного клиента SQL Server обновлен для обеспечения поддержки новейших функций SQL Server.) Чтобы решить эту проблему, можно либо возвратиться к использованию компонентов MDAC, либо провести миграцию к System.Data.SqlClient.
Собственный клиент SQL Server и MDAC поддерживают уровень изоляции транзакций read committed при использовании управления версиями строк, однако изоляцию транзакций моментальных снимков поддерживает только собственный клиент SQL Server. (С точки зрения программирования уровень изоляции транзакций READ COMMITTED с управлением версиями строк представляет собой то же, что и транзакция READ COMMITTED.) Дополнительные сведения см. в разделе Выбор уровня изоляции на основе управления версиями строк.
См. также