Категории
Войти
Поиск
Реклама
video stock, rusarchive|По радио на днях говорили, что бронирование отелей - это очень важно.Отзывы SsangYong: видеорегистратор автомобильный цена. Видеорегистратор для авто! Цена.;Ювидерм - инъекции красоты: ювидерм ультра.Полезное:
Новые статьи
Опечатка?
Выделите текст и нажмите Shift+Enter.
И мы в ближайшее время ее исправим!
Счетчики
| Краткий обзор наборов данных DataSet |
|
Объект типа DataSet представляет собой сложный контейнер для данных в памяти. Класс DataSet содержит коллекцию экземпляров DataTable, которые содержат реляционные данные, сохраняемые в наборе. Каждый экземпляр DataTable содержит в себе коллекцию экземпляров DataColumn, которое определяет схему данных в таблице, и коллекцию экземпляров DataRow, которое обеспечивает доступ к сохраняемым данным, как к набору строк. Для работы с экземпляром набора данных обычно создается адаптер данных для того провайдера данных, который вы используете. При работе с нетипизированными наборами данных (экземплярами класса DataSet) схема действий, иллюстрируемая этим примером, является типичной. Вначале вы создаете экземпляр соединения с базой данных и передаете строку соединения конструктору объекта Sqiconnection. Если вы работаете с SQL Server 2005 Express, то строка соединения немного отличается: вместо свойства database или InitialCatalog вы используете свойство AttachDbFilename. Как только вы создали объект соединения, вы создаете экземпляр sqlDataAdapter и передаете в него запрос SELECT и объект соединения. Запрос, который вы передаете конструктору адаптера данных, задает значение его свойства SelectCommand, которое будет использоваться при каждом обращении к методу Fill. При вызове метода Fill происходит следующее: Соединение, если оно еще не открыто, открывается. Исполняется объект SqlCommand, на который ссылается свойство SelectCommand адаптера. Выполняется проверка, имеется ли в наборе данных таблица с нужным именем и схемой данных, куда можно поместить возвращаемые запросом строки. Имя зависит от того, было ли имя таблицы указано при обращении к методу Fill, как, например, было указано имя "Customers" в нашем образце кода. Если таблица существует, полученные данные добавляются в нее, дополняя или замещая существующие строки, в зависимости от заданных ограничений для данной таблицы и текущего значения свойства FillCommandBehavior. Если таблицы не существует, то к набору данных добавляется новая таблица, и результаты помещаются в нее. Если соединение было открыто методом Fill, оно закрывается. щи этого адаптера вы загружаете данные в объект DataSet при помощи запроса к базе данных. При загрузке данных в объекте-наборе создаются таблицы, столбцы и строки, в которых содержатся данные, возвращенные запросом к базе, как это иллюстрируется следующим примером: Наборы данных позволяют также вносить обновления в базу данных с оптимистической конкуренцией). Для этого каждая таблица данных отслеживает флаг Rowstate для каждой строки, который показывает, осталась ли строка неизменной или была изменена, добавлена или удалена. Также таблица поддерживает дополнительную копию каждой модифицированной строки и может, таким образом, хранить как первоначально полученные из базы данных значения, так и текущие значения в строке. Благодаря этому обстоятельству можно определить, была ли строка в базе данных изменена кем-то другим в промежутке между заполнением набора данных и моментом, когда вы решили обновить базу этими данными. Чтобы обновить данные в базе при помощи DataSet, используют метод Update адаптера данных. Метод Update работает аналогично уже описанному в этой главе методу Fill с той разницей, что для каждой строки каждой таблицы в наборе данных он выполняет отдельную команду, определяющую, не была ли строка удалена, изменена или добавлена. Для выполнения этих команд адаптер данных использует объекты SqlCommand, на которые ссылаются свойства UpdateCommand, InsertCommand и DeleteCommand. В ADO.NET 2.0 имеется возможность выполнять запросы пакетами, чтобы избежать излишних повторяющихся обращений к базе данных, для этого используется свойство UpdateBatchSize адаптера. В дополнение к перечисленным возможностям, тип DataSet поддерживает также определение ограничений целостности для своих таблиц, что позволяет задать такие ограничения, как первичный ключ, уникальный ключ и внешний ключ. Также вы можете определить отношения между данными, чтобы легко переходить от родительской строки в одной таблице к ассоциированным дочерним строкам в другой таблице и наоборот, и можете определять экземпляры объектов DataView, служащие оболочками для DataTable. Это псевдотаблицы, которые используются для сортировки и фильтрации данных в таблицах без влияния на само содержимое таблиц - такой механизм очень схож с псевдотаблицами (views) в базах данных. Подводя черту, скажем, что класс DataSet - это высокофункциональный контейнер данных, предназначенный для прозрачной работы с привязкой к данным в Windows Forms. Если вам требуются более подробные сведения о классе DataSet и работе с ним, а также о других темах доступа к данным вообще, смотрите приложение. Раз уж у нас есть все эти функциональные возможности класса DataSet, зачем нам нужно что-то еще? Увы, прямое использование класса DataSet и адаптеров данных связано с двумя проблемами, а именно: безопасность в отношении типов и порождаемый ими стиль программирования. Проблема безопасности по типу состоит в том, что столбцы внутри DataTable должны быть способны принять содержимое любого типа в зависимости от схемы источника данных, на который они отображаются. Реализуется это благодаря тому, что столбец содержит просто ссылку на Object. Поскольку в .NET все типы являются производными от Object, то столбец может ссылаться на любой тип; следовательно, набор данных может использоваться совместно с любым механизмом хранения данных, если типы сохраняемых данных можно поставить в соответствие типам .NET. Такой подход делает набор данных весьма гибким инструментом. Однако за гибкость обычно приходится чем-то платить, и в данном случае первое, чем вы расплатитесь - это безопасность по типу.
Newer news items:
Older news items:
|
