Рекомендации по стратегиям доступа к данным
Обновлен: Ноябрь 2007
ADO.NET предполагает модель для доступа к данным, в которой вы открываете подключение, получаете данные или выполняете операцию и закрываете подключение. ADO.NET предоставляет две основные стратегии для работы с этой моделью. Первая стратегия — это сохранение данных в наборе данных, представляющем собой кэш записей в оперативной памяти, с которыми можно работать при отсутствии подключения к источнику данных. Чтобы использовать набор данных сначала необходимо создать его экземпляр, а затем с помощью адаптера данных заполнить его данными из источника данных. После этого можно работать с данными, хранящимися в наборе данных, например, путем связывания элементов управления с членами этого набора. Дополнительные сведения см. в разделе Общие сведения о наборах данных в Visual Studio.
Альтернативной стратегией является выполнение операций непосредственно с базой данных. В этой стратегии используется запрос объекта TableAdapter или команда для работы с данными, содержащая инструкцию SQL или ссылку на хранимую процедуру. Затем можно выполнить запрос или команду для осуществления необходимых действий. Дополнительные сведения см. в разделе Выборка данных в приложение.
Хранение данных в наборах данных
Обычной моделью доступа к данным в приложениях Visual Studio является хранение их в наборах данных и использование адаптеров таблиц или адаптеров данных для их чтения и записи в базу данных. Модель наборов данных имеет следующие преимущества:
Работа с несколькими таблицами Набор данных может содержать несколько таблиц результатов, которые поддерживаются как отдельные объекты. Можно работать с отдельными таблицами или переходить от одной таблицы к другой как от родительской к дочерней.
Работа с данными из нескольких источников В таблицах наборов данных могут одновременно содержаться данные из разных источников (например, из разных баз данных, из файлов XML, электронных таблиц и т. д. — все в одном наборе данных). После того, как данные попадают в набор данных, можно управлять ими и устанавливать между ними связи в едином формате, как если бы они имели общий источник.
Перемещение данных между уровнями в распределенном приложении С помощью хранения данных в наборе данных можно легко перемещать их между уровнем представления, бизнес-уровнем и уровнем данных приложения.
Обмен данными с другими приложениями Наборы данных позволяют реализовать эффективный способ обмена данными с другими компонентами приложения и с другими приложениями. Наборы данных включают широкую поддержку таких возможностей, как сериализация данных в формате XML, чтение и запись XML-схем.
Привязка данных При работе с формами обычно проще привязывать элементы управления к данным из набора данных, чем программными средствами загружать значения данных в элементы управления после выполнения команды.
Сохранение записей для повторного использования Наборы данных позволяют работать с одними и теме же записями несколько раз без повторного обращения к базе данных. С помощью определенных средств набора данных можно осуществлять сортировку и фильтрацию записей, а также использовать набор данных в качестве источника данных при подкачке.
Облегчение программирования При работе с набором данных можно создать файл класса, предоставляющий структуру набора в виде объектов (например, к таблице Customers набора данных можно получить доступ как к объекту dataset.Customers). Это делает процесс программирования более простым, понятным и менее склонным к ошибкам. Все это поддерживается такими средствами Visual Studio, как IntelliSense, мастер настройки адаптеров данных и т. п.
Выполнение действий с базой данных напрямую
Альтернативой является взаимодействие непосредственно с базой данных. Эта модель предполагает использование объекта команды данных, который содержит инструкцию SQL или ссылку на хранимую процедуру. Затем можно выполнить команду для осуществления необходимых действий. Дополнительные сведения см. в разделе Команды и параметры (ADO.NET).
Примечание о безопасности. |
---|
При использовании команд для обработки данных со свойством CommandType, равным Text, внимательно проверьте сведения, которые отправляются клиентом, перед передачей их базе данных. Злоумышленники могут попытаться отправить (вставить) измененные или дополнительные инструкции SQL в целях получения несанкционированного доступа к базе данных или ее повреждения. Прежде чем передавать пользовательский ввод в базу данных, необходимо всегда проверять допустимость данных. Рекомендуется по возможности использовать запросы с параметрами и хранимые процедуры. |
Непосредственное выполнение операций над базой данных имеет определенные преимущества, в том числе:
Дополнительные функциональные возможности Как уже упоминалось, некоторые операции, например выполнение команд DDL, можно выполнить только с помощью команд обработки данных.
Больший контроль над выполнением При использовании команд (а также средства чтения данных, если происходит считывание данных) разработчик получает более прямой контроль над тем, как и когда выполняются инструкции SQL или хранимая процедура и что происходит с результатами или возвращаемыми значениями.
Снижение дополнительных издержек При чтении (записи) данных непосредственно из базы данных можно не сохранять данные в наборе данных. Поскольку набор данных потребляет ресурсы памяти, то можно сократить дополнительные издержки в приложении. В особенности это характерно для ситуаций, в которых данные скорее всего будут использоваться только один раз, например при отображении результатов поиска на веб-странице. В этом случае создание и заполнение набора данных может быть лишним этапом отображения данных пользователю.
Снижение трудоемкости программирования в ряде случаев. В некоторых случаях, в частности, при работе с веб-приложениями, для сохранения состояния набора данных требуется дополнительное программирование. Например, страницы Web Forms всякий раз создаются заново в каждом цикле обработки, и, если не запрограммировать сохранение и восстановление набора данных, он тоже будет удаляться и создаваться вновь в каждом цикле обработки. При использовании средства чтения данных для чтения непосредственно из базы данных можно отказаться от дополнительных этапов, необходимых для управления набором данных.
Рекомендации по доступу к данным
В следующем разделе содержатся рекомендации по выбору стратегии доступа к данным для приложений различных типов.
Windows Forms
Как правило, в формах Windows Forms следует использовать наборы данных. Формы Windows Forms обычно используются в толстых клиентах, в которых форма не создается и не удаляется (вместе со своими данными) при каждой пользовательской операции, как это имеет место в Web Forms. Кроме того, приложения Windows Forms традиционно отличаются сценариями доступа к данным, которые получают преимущества от сохранения кэша записей, например, при отображение в форме записей одна за другой. Дополнительные сведения см. в разделе Создание клиентских приложений для работы с данными.
В частности, рекомендуется использовать наборы данных в следующих ситуациях:
Если одни и те же записи используются многократно, например, при предоставлении пользователю возможности перемещения между записями.
При использовании архитектуры привязки данных Windows Forms, которая специально предназначена для работы с наборами данных.
Во всех случаях, перечисленных выше для Web Forms.
Используйте запрос объекта TableAdapter или команду обработки данных в следующих случаях:
При получении из базы данных скалярного значения
При выполнении операции, не являющейся запросом, например команды DDL.
При получении данных, доступных только для чтения, для отображения в форме — например, при создании отчета. Иными словами, используйте команды обработки данных в случаях, когда нет необходимости сохранять данные после осуществления доступа к ним.
Веб-формы
В общем случае следует использовать команды обработки данных; для извлечения данных следует использовать объект чтения данных. Поскольку страницы Web Forms, а также их элементы управления и компоненты создаются каждый раз заново в каждом цикле обработки — нецелесообразно создавать и заполнять набор данных всякий раз, если не предполагается его кэширование между циклами обработки.
Набор данных следует использовать в следующих ситуациях:
При работе с несколькими отдельными таблицами или таблицами из разных источников данных.
При обмене данными с другими приложениями или компонентами, такими как веб-службы XML.
При необходимости выполнять большой объем операций с каждой строкой, полученной из базы данных. При использовании команд обработки данных и средства чтения данных обработка каждой записи при считывании может привести к тому, что подключение будет открыто очень долго, что, в свою очередь, может отрицательно повлиять на производительность и масштабируемость приложения.
В случае, если обработка данных включает работу со взаимозависимыми записями (например, при поиске сведений в связанных записях).
Если над данными нужно выполнить операции XML, например преобразования XSLT.
Если предпочтительно использование простых средств программирования, предоставляемых наборами данных.
Веб-службы XML
Веб-службы XML — это приложения ASP.NET и потому они используют ту же модель, что и страницы Web Forms: веб-службы XML создаются и удаляются всякий раз, когда осуществляется их вызов. Отсюда следует, что модель доступа к данным для веб-служб XML, в основном, та же, что и для Web Forms. Однако веб-службы XML часто являются объектами промежуточного уровня и часто применяются главным образом для обмена данными с другими приложениями через Интернет.
Используйте наборы данных в следующих случаях:
Если веб-служба XML отправляет и получает данные — например, отправляет возвращаемые значения методов, а принимает их в качестве аргументов методов. Это основное соображение при выборе способа работы с данными для веб-служб XML; даже если существуют другие соображения в пользу команд обработки данных, необходимость обмена данными с другими компонентами практически однозначно указывает на то, что следует использовать наборы данных.
Во всех случаях, перечисленных выше для форм Web Forms.
Используйте команды обработки данных (а при необходимости — средство чтения данных) в следующих случаях:
Веб-служба XML извлекает скалярное значение.
Веб-служба XML выполняет операцию, не являющуюся запросом, например, команду DDL.
Веб-служба XML вызывает хранимую процедуру для выполнения действий внутри базы данных.
См. также
Основные понятия
Другие ресурсы
Пошаговые руководства работы с данными
Начало работы с доступом к данным
Подключение к данным в Visual Studio
Подготовка приложения к получению данных
Отображение данных на форме в приложениях Windows