Поделиться через


Знакомство с адаптерами данных

Обновлен: Ноябрь 2007

Адаптеры данных являются неотъемлемой частью управляемых поставщиков ADO.NET, которые представляют собой набор объектов, используемых для связи между источником данных и набором данных. (Кроме адаптеров, управляемые поставщики содержат объекты подключения, объекты чтения данных и командные объекты.) Адаптеры используются для обмена данными между источником данных и набором данных. Для многих приложений это означает, что происходит считывание данных из базы данных в набор данных с последующей записью измененных данных из набора данных обратно в базу данных. Однако адаптер данных способен перемещать данные между любым источником и набором данных. Например, адаптер способен передавать данные между сервером Microsoft Exchange и набором данных.

acb32th4.alert_note(ru-ru,VS.90).gifПримечание.

В предыдущей версии Visual Studio адаптеры данных использовались для связи между приложением и базой данных. Хотя адаптеры данных по-прежнему являются основным компонентом Поставщики данных .NET Framework (ADO.NET), создаваемые с помощью конструктора адаптеры таблиц упрощают процесс перемещения данных между приложением и базой данных. Дополнительные сведения по работе с адаптерами таблиц содержатся в разделе Общие сведения об адаптере таблиц.

Вообще говоря, адаптеры настраиваются для определения данных, предназначенных для перемещения в набор данных и из него. Часто это происходит в виде ссылок на инструкции SQL или сохраненные процедуры, вызываемые для чтения или записи в базу данных.

Visual Studio позволяет использовать следующие адаптеры данных для доступа к базам данных.

  • Объект OleDbDataAdapter предназначен для использования с любыми источниками данных, предоставляемыми поставщиками OLE DB.

  • Объект SqlDataAdapter специфичен для SQL Server. Поскольку ему не требуется проходить через слой OLE DB, этот объект работает быстрее, чем OleDbDataAdapter. Однако он используется только с SQL Server 7.0 или более поздними версиями.

  • Объект OdbcDataAdapter оптимизирован для доступа к источникам данных ODBC.

  • Объект OracleDataAdapter оптимизирован для доступа к базам данных Oracle.

    acb32th4.alert_note(ru-ru,VS.90).gifПримечание.

    Адаптеры данных, подключения данных, команды данных и считыватели данных вместе образуют поставщика данных платформы .NET Framework. Корпорация Майкрософт и сторонние производители могут предлагать других поставщиков данных платформы .NET Framework, которые можно интегрировать в Visual Studio. Дополнительные сведения о различных поставщиков данных платформы .NET Framework содержатся в разделе Поставщики данных .NET Framework (ADO.NET).

Для создания адаптеров и управления ими используются следующие части пространств имен, относящихся к управляемым поставщикам платформы .NET Framework.

Пространство имен управляемого поставщика SqlClient
Пространство имен SQL системных данныхПространство имен управляемого поставщика OleDb
График SystemDataADOnamespace

Обычно каждый адаптер данных обменивается данными между одной таблицей-источником данных и одним объектом DataTable в наборе данных. Если набор данных содержит несколько таблиц данных, то обычная стратегия заключается в том, чтобы иметь несколько адаптеров данных, которые предоставляют ему данные и записывают его данные назад в отдельные таблицы источника данных.

Если необходимо заполнить таблицу в наборе данных, вызывается метод адаптера, который выполняет инструкцию SQL или сохраненную процедуру. Адаптер создает объект чтения данных (SqlDataReader, OleDbDataReader, OdbcDataReader или OracleDataReader) для считывания данных в наборе данных.

acb32th4.alert_note(ru-ru,VS.90).gifПримечание.

Можно считывать данные из базы данных без сохранения в наборе данных: это очень эффективно в случае, когда эти данные предназначены только для чтения. Дополнительные сведения содержатся в разделе "Данные только для чтения" ниже. Имеется возможность непосредственного выполнения инструкций SQL без их использования для заполнения набора данных. Дополнительные сведения см. в разделе Команды и параметры (ADO.NET).

Аналогично, при необходимости обновления базы данных вызывается метод адаптера, который вызывает соответствующую инструкцию SQL или хранимую процедуру для обновления базы данных.

Адаптеры данных и связанные таблицы

Причина, по которой в наборе данных используются отдельные таблицы, заключается в том, что адаптер данных обычно не ссылается на команды SQL или сохраненные процедуры, которые объединяют таблицы. Вместо этого сведения из связанных таблиц считываются отдельно в набор данных различными адаптерами. Затем объект DataRelation используется для управления ограничениями между таблицами набора данных (например каскадными обновлениями) и для предоставления возможности перехода между главными и дочерними записями.

Например, предположим, что необходимо работать с двумя связанными таблицами в базе данных Northwind Customers и Orders. Вместо задания объединения обеих таблиц в один результирующий набор чаще всего определяются два адаптера, один из которых предназначен для заполнения таблицы Customers в наборе данных, а второй – для считывания записей таблицы Order в другую таблицу набора данных. Отдельные адаптеры, возможно, содержат критерии выбора для ограничения числа записей в таблицах данных.

В наборе данных также определяется объект DataRelation, задающий связывание записей таблицы заказов с записями таблицы клиентов с помощью поля CustomerID. При этом сохраняется возможность управления таблицами по отдельности, которая отсутствует в случае объединения таблиц перед выборкой записей из источника данных. Если необходимо работать со связанными записями, вызываются свойства и методы объекта DataRelation.

Дополнительные сведения об обновлении данных см. в разделе Отношения в наборах данных.

Объекты подключений

Для чтения и записи данных адаптеру данных необходимо открытое подключение к источнику данных. Поэтому адаптер использует объекты подключения (SqlConnection, OleDbConnection, OdbcConnection или OracleConnection) для связи с источником данных. (Адаптер может содержать до четырех ссылок на подключения, по одной для каждого типа выполняемого действия: Выбор, Обновление, Вставка и Удаление.)

В следующей таблице перечислены объекты подключений, имеющиеся на вкладке ДанныеПанели элементов:

Объект подключения

Описание

SqlConnection

Подключение к СУБД SQL Server 7.0 или более поздним версиям.

OleDbConnection

Подключение к любому источнику данных OLE DB.

OdbcConnection

Подключение к источнику данных ODBC.

OracleConnection

Подключение к базе данных Oracle.

Во всех случаях объект подключения поддерживает единственный сеанс в источнике данных. Все объекты подключений предоставляют свойства для установки и изменения деталей подключения (например пользовательского идентификатора и пароля, времени ожидания подключения). Они также предоставляют методы для начала, завершения и отката транзакций баз данных. Дополнительные сведения о классах Connection см. в разделе Соединение с источником данных (ADO.NET).

acb32th4.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Хранение конфиденциальной информации, к которой относятся имя сервера, имя пользователя и пароль, может негативно сказаться на безопасности приложения. Использование Windows Automation (также называемой встроенными средствами безопасности) является более безопасным способом управления доступом к базе данных.

Командные объекты ADO.NET

С помощью адаптера можно читать, добавлять, обновлять и удалять записи в источнике данных. Возможность установки способа выполнения каждой из этих операций обеспечивается следующими четырьмя свойствами, поддерживаемыми адаптером:

  • SelectCommand – ссылка на команду (инструкция SQL или имя сохраненной процедуры), которая извлекает строки из хранилища данных.

  • InsertCommand – ссылка на команду для вставки строк в хранилище данных.

  • UpdateCommand – ссылка на команду для изменения строк в хранилище данных.

  • DeleteCommand – ссылка на команду для удаления строк из хранилища данных.

Свойства сами являются объектами – они представляют собой экземпляры класса SqlCommand, OleDbCommandOdbcCommand или OracleCommand. Данные объекты поддерживают свойство CommandText, содержащее ссылку на инструкцию SQL или сохраненную процедуру.

acb32th4.alert_note(ru-ru,VS.90).gifПримечание.

Необходимо, чтобы класс команды соответствовал классу подключения. Например, если объект SqlConnection используется для связи с SQL-сервером, необходимо использовать команды, производные от класса SqlCommand.

Несмотря на то, что возможно явное задание текста командного объекта, это не всегда необходимо. Во многих случаях Visual Studio создает необходимую инструкцию SQL. Кроме того, адаптер способен автоматически создавать соответствующие инструкции SQL во время выполнения, если объекты UpdateCommand, InsertCommand или DeleteCommand не указаны. Дополнительные сведения см. в разделе Создание команд с помощью построителей команд (ADO.NET).

Однако имеется возможность управления командными объектами во время разработки и выполнения для более жесткого контроля за выполнением команд. Например, имеется возможность создать или изменить команду, связанную с объектом SelectCommand, непосредственно перед ее выполнением.

Пользователь может также выполнить команды самостоятельно, независимо от адаптера данных. Любые команды SQL можно без изменения передать с помощью адаптера данных, например команды, используемые для определения или изменения определений базы данных. Также возможен непосредственный вызов хранимых процедур, если они не возвращают наборы записей, например тех, которые проверяют пользовательский ввод на соответствие базе данных. Дополнительные сведения см. в разделе Выполнение команды (ADO.NET).

acb32th4.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

При использовании команд для обработки данных со свойством CommandType, равным Text, внимательно проверьте сведения, которые отправляются клиентом, перед передачей их базе данных. Злоумышленники могут попытаться отправить (вставить) измененные или дополнительные инструкции SQL в целях получения несанкционированного доступа к базе данных или ее повреждения. Перед передачей в базу данных сведений, введенных пользователем, обязательно проверяйте допустимость этих сведений. Рекомендуется использовать запросы с заданными параметрами или, по возможности, сохраненные процедуры. Дополнительные сведения см. в разделе Общие сведения об использовании сценариев.

Параметры команд

Обычно команды в адаптере данных являются параметрически управляемыми. Например, команда для свойства SelectCommand часто имеет параметр в предложении WHERE, поэтому во время выполнения можно указать записи, которые необходимо получить из базы данных. В других командах используются параметры, которые позволяют передавать во время выполнения данные для записи и указывать запись, требующую обновления. Дополнительные сведения об использовании параметров в адаптерах данных содержатся в разделе Параметры команд адаптеров обработки данных.

Чтение и обновление с помощью адаптеров данных

Основным предназначением адаптера данных является передача данных между хранилищем данных и набором данных. Адаптер поддерживает определенные методы для передачи данных в обоих направлениях.

acb32th4.alert_note(ru-ru,VS.90).gifПримечание.

Если необходимо читать (но не обновлять) данные, нет необходимости сохранять их в наборе данных. Вместо этого их можно считать непосредственно из базы данных в приложение. Дополнительные сведения содержатся в разделе "Данные только для чтения" ниже.

Адаптер данных используется для выполнения следующих операций.

  • Извлечение строк из хранилища данных в соответствующие таблицы в наборе данных.

    Для извлечения строк в наборе данных используется метод Fill объекта адаптера данных (SqlDataAdapter, OleDbDataAdapterOdbcDataAdapter или OracleDataAdapter). При вызове метода Fill он передает инструкцию SQL SELECT в хранилище данных.

  • Передача изменений, внесенных в таблицу набора данных, в соответствующее хранилище данных.

    Для передачи таблицы набора данных в хранилище данных используется метод адаптера Update. Если метод вызван, он выполняет инструкции SQL INSERT, UPDATE или DELETE, в зависимости от того, является ли запись новой, измененной или удаленной.

    Для получения дополнительных сведений о том, как выполняется обновление с помощью адаптеров данных, см. раздел Обновление источников данных с помощью объектов DataAdapter (ADO.NET).

Данные только для чтения

Если необходимо, чтобы программа выполнила последовательное чтение с помощью запроса, вместо заполнения набора данных используется объект считывания данных DataReader. Объект устройства считывания данных выполняет выборку данных из источника данных и передает их прямо в приложение. Обычно объекты считывания данных используются только для последовательного доступа к данным на чтение, когда нет необходимости кэшировать данные в наборе данных. (Адаптер данных сам использует объект считывания данных для заполнения набора данных.) Примером служит страница Web Forms, которая отображает сведения из базы данных. Поскольку страница Web Forms воссоздается при каждом цикле обработки, часто бывает неудобно сохранять данные в наборе данных.

Visual Studio предоставляет четыре объекта чтения данных: SqlDataReader, OleDbDataReader, OdbcDataReader и OracleDataReader. Дополнительные сведения об использовании для эффективного доступа на чтение объектов для чтения, содержатся в разделе Объекты DataAdapter и DataReader (ADO.NET).

Сопоставления таблиц

По умолчанию при использовании средств Visual Studio для создания набора данных из таблиц базы данных имена таблиц и столбцов в наборе данных и базе данных совпадают. Однако в некоторых случаях это не очень удобно. Например, имена, используемые в базе данных, могут оказаться слишком краткими, или подробными, или выполненными на иностранном языке. При работе с существующей схемой может также оказаться, что имена, определенные в схеме, не совпадают с именами, используемыми в базе данных.

Поэтому имена в базе данных и наборе данных не обязательно должны совпадать. Вместо этого в команде набора данных создаются новые имена таблиц и столбцов, и затем сопоставляются с именами, используемыми в базе данных. Адаптеры используют коллекцию TableMappings для поддержания соответствия между структурами набора данных (данные таблиц и столбцов данных) и структурами хранилища данных (таблицы и столбцы). Дополнительные сведения о сопоставлении таблиц содержатся в разделе Сопоставление таблиц в адаптерах данных.

См. также

Задачи

Практическое руководство. Настройка параметров для адаптеров обработки данных

Практическое руководство. Сопоставление столбцов источника данных со столбцами таблицы набора данных

Основные понятия

Заполнение DataSet из DataAdapter (ADO.NET)

Новые возможности данных

Создание приложений для обработки данных с помощью Visual Studio

Другие ресурсы

Объекты DataAdapter и DataReader (ADO.NET)

Создание адаптеров обработки данных

Пошаговые руководства работы с данными

ADO.NET