Параллельное выполнение в ADO.NET
Обновлен: November 2007
Параллельное выполнение в платформе .NET Framework — это возможность выполнять приложение на компьютере, на котором установлено несколько версий .NET Framework, используя только ту версию, для которой приложение скомпилировано. Подробные сведения о настройке параллельного выполнения см. в разделе Параллельное выполнение.
Приложение, скомпилированное при помощи одной версии платформы .NET Framework, может работать на другой версии .NET Framework. Однако рекомендуется компилировать разные версии приложения для каждой установленной версии .NET Framework и выполнять их по отдельности. В любом случае следует знать, какие изменения вносятся в разные версии ADO.NET, которые могут повлиять на прямую и обратную совместимость приложения.
Прямая и обратная совместимость
Прямая совместимость означает, что приложение можно скомпилировать в предыдущей версии .NET Framework и при этом успешно запускать в более поздней версии .NET Framework. Код ADO.NET, написанный для .NET Framework 1.1, обладает прямой совместимостью с более поздними версиями.
Обратная совместимость означает, что приложение, скомпилированное для более новой версии .NET Framework, будет работать и на предыдущих версиях .NET Framework без потери функциональности. Разумеется, функции, появившиеся в новой версии .NET Framework, при этом будут недоступны.
Поставщик данных .NET Framework для ODBC
Начиная с версии 1.1, поставщик данных .NET Framework для ODBC (System.Data.Odbc) является частью платформы .NET Framework. Разработчики, работающие с .NET Framework версии 1.0, могут загрузить поставщик данных ODBC в Центре разработчиков средств доступа к данным и их хранения. Пространство имен для загруженного поставщика данных .NET Framework для ODBC — Microsoft.Data.Odbc.
Если в приложении, разработанном для .NET Framework версии 1.0, для подключения к источнику данных используется поставщик данных ODBC и это приложение необходимо запускать на платформе .NET Framework версии 1.1 или более поздней, то следует изменить пространство имен для поставщика данных ODBC на System.Data.Odbc. Затем приложение необходимо перекомпилировать для более поздней версии .NET Framework.
Если в приложении, разработанном для .NET Framework версии 2.0 и более поздних версий, для подключения к источнику данных используется поставщик данных ODBC и это приложение необходимо запускать на платформе .NET Framework версии 1.0, то следует загрузить поставщик данных ODBC и установить его в систему .NET Framework версии 1.0. Затем нужно изменить пространство имен для поставщика данных ODBC на Microsoft.Data.Odbc и перекомпилировать приложение для .NET Framework версии 1.0.
Поставщик данных .NET Framework для Oracle
Начиная с версии 1.1, поставщик данных .NET Framework для Oracle (System.Data.OracleClient) является частью платформы .NET Framework. Разработчики, работающие с .NET Framework версии 1.0, могут загрузить этот поставщик данных в Центре разработчиков средств доступа к данным и их хранения.
Если в приложении, разработанном для платформы .NET Framework версии 2.0 и более поздних версий, для подключения к источнику данных используется поставщик данных и это приложение необходимо запускать на платформе .NET Framework версии 1.0, то следует загрузить поставщик данных и установить его в систему .NET Framework версии 1.0.
Управление доступом для кода
Поставщики данных .NET Framework в платформе .NET Framework версии 1.0 (System.Data.SqlClient, System.Data.OleDb) должны выполняться с правами доступа FullTrust. Любая попытка использовать поставщики данных .NET Framework из платформы .NET Framework версии 1.0 в зоне с правами доступа ниже FullTrust вызовет исключение SecurityException.
Однако, начиная с .NET Framework версии 2.0, все поставщики данных .NET Framework можно использовать в частично доверенных зонах. Кроме того, в .NET Framework версии 1.1 у поставщиков данных .NET Framework появилась новая функция безопасности. Эта функция позволяет указывать, какие строки соединения могут использоваться в конкретной зоне безопасности. Также можно отключить использование пустых паролей для конкретной зоны безопасности. Дополнительные сведения см. в разделе Управление доступом для кода и ADO.NET.
Так как в каждой установке .NET Framework есть отдельный файл Security.config, проблем с совместимостью параметров безопасности не возникает. Однако если в приложении используются дополнительные возможности безопасности платформы ADO.NET, появившиеся в .NET Framework версии 1.1 и более поздних версиях, то их невозможно будет распространить на систему версии 1.0.
Выполнение SqlCommand
Начиная с .NET Framework версии 1.1, процедура выполнения методом ExecuteReader команд в источнике данных изменилась.
На платформе .NET Framework версии 1.0 метод ExecuteReader выполнял все команды в контексте хранимой процедуры sp_executesql. В результате этого команды, которые влияли на состояние соединения (например, SET NOCOUNT ON), применялись только к выполнению текущей команды. Состояние соединения не изменялось для любых последующих команд, выполнявшихся при открытом соединении.
На платформе .NET Framework версии 1.1 и более поздних версий метод ExecuteReader выполняет команды в контексте хранимой процедуры sp_executesql, только если команда содержит параметры, что обеспечивает повышение производительности. В результате этого, если команда, влияющая на состояние соединения, включена в непараметризованную команду, она изменяет состояние соединения для всех последующих команд, выполняемых при открытом соединении.
Рассмотрим следующий пакет команд, выполняемых при обращении к ExecuteReader.
SET NOCOUNT ON;
SELECT * FROM dbo.Customers;
На платформе .NET Framework версии 1.1 и более поздних версий NOCOUNT останется в состоянии ON для всех последующих команд, выполняемых при открытом соединении. На платформе .NET Framework версии 1.0 NOCOUNT находится в состоянии ON только во время выполнения текущей команды.
Это изменение может влиять как на прямую, так и на обратную совместимость приложения, если оно зависит от поведения ExecuteReader для любой из версий платформы .NET Framework.
Для приложений, которые работают и в более ранних, и более поздних версиях .NET Framework, можно написать собственный код, гарантирующий единообразное поведение независимо от используемой версии платформы. Если требуется сделать так, чтобы команда изменяла состояние соединения для всех последующих команд, рекомендуется выполнять команду с помощью ExecuteNonQuery. Если требуется сделать так, чтобы команда не изменяла соединение для всех последующих команд, рекомендуется включать в нее команды для сброса состояния соединения. Например:
SET NOCOUNT ON;
SELECT * FROM dbo.Customers;
SET NOCOUNT OFF;
Собственный клиент Microsoft SQL Server
Собственный клиент Microsoft SQL Server содержит поставщик SQL OLE DB и драйвер SQL ODBC в одной собственной DLL-библиотеке, поддерживающей приложения, которые используют собственные API-интерфейсы (ODBC, OLE DB и ADO) для Microsoft SQL Server. Для создания новых и улучшения существующих приложений, в которых требуется использовать возможности, появившиеся в SQL Server 2005, например MARS (Multiple Active Result Sets), уведомления о запросах, определяемые пользователем типы данных (UDT) и поддержка типов данных XML, вместо компонентов MDAC (Microsoft Data Access Components) следует использовать собственный клиент SQL Server.
Компоненты доступа к данным (MDAC)
Поставщикам данных .NET Framework для OLE DB и ODBC требуются компоненты MDAC 2.6 или более поздней версии во всех версиях платформы .NET Framework. Рекомендуется установить компоненты MDAC 2.8 с пакетом обновления 1 (SP1). Хотя это требование не вызывает какие-либо проблемы с параллелизмом, обратите внимание, что в настоящее время компоненты MDAC не поддерживают параллельное выполнение. Поэтому важно убедиться, что приложение продолжит правильно работать с новой версией перед обновлением компонентов MDAC в установленной копии.
Дополнительные сведения о компонентах MDAC см. в Центре разработчиков средств доступа к данным и их хранения.
Компоненты Windows DAC (Windows Data Access Components)
Компоненты Windows DAC (Windows Data Access Components) 6.0 представляют собой набор технологий, включенных в операционную систему Windows Vista и предназначенных для предоставления доступа к данным по всему предприятию. Эти технологии включают последние версии технологий доступа к данным, входящих в состав компонентов MDAC: ADO (Microsoft ActiveX Data Objects), OLE DB и ODBC (Microsoft Open Database Connectivity).
Дополнительные сведения о Windows DAC см. в разделе Общие сведения о пакете SDK для компонентов доступа к данным Windows.