среда, 13 января 2010 г.

10 вопросов на понимание ADO.NET

1)Что такое Dataset и зачем он нужен, а в каких случаях его использовать нецелесообразно?

Объект поддерживает копии записей из базы данных без соединения. Он сохраняет записи из таблицы (или множества таблиц) в памяти, не поддерживая постоянного соединения с сервером.

DataSet потребляет больше памяти, чем DataReader, поэтому если памяти недостаточно, то лучше использовать DataReader. DayaReader работает быстрее с одним пользователем, но если база многопользовательская, то в совокупности получиться медленнее из-за открытого соединения, и лучше тогда использовать DataSet. Если нам не нужнавозможность записи изменений в находящийся в памяти кэш, и не нужен индексированный доступ к произвольной строке в произвольный момент времени и между чтениями строк не будет слишком много длительных вычислений – тогда целесообразнее использовать DataReader, он даст прирост в производительности.

2)В каких случаях Вы будете использовать DataReader, в каких DataSet?

Объект DataSet используется для выполнения следующих действий.

  • Удаленное взаимодействие уровней и веб-служб XML.
  • Динамическое взаимодействие с данными, например связывание с элементом управления форм Windows Forms или сочетание данных из нескольких источников.
  • Локальное кэширование данных приложения.
  • Иерархическое XML-представление реляционных данных, например XSL-преобразования или язык XML-путей.
  • Расширенная обработка данных после отключения от источника данных.

Если функциональность объекта DataSet не используется в приложении, можно повысить производительность, включив вместо него в приложение объект DataReader, получающий данные в режиме чтения.

3)Что такое Typed Dataset, достоинства и недостатки?

Достоинства:

  • Читаемость кода. Для обращения к таблицам и полям типизированного DataSet можно использовать типизированные методы и свойства
  • Проверка типов при компиляции. Неправильные имена таблиц и полей обнаруживаются на этапе компиляции, а не выполнения.

Недостатки:

  • Проблемы расширения. Если схема базы данных изменена, то, возможно, для поддержки новой схемы потребуется заново генерировать типизированный класс DataSet. При повторной генерации может понадобиться внесение изменений в любой специализированный код, содержащийся в типизированном DataSet. Сборку, содержащую типизированный DataSet, придется заново развертывать во всех клиентских приложениях.
  • Создание экземпляров. Создать экземпляр типа оператором new нельзя.
  • Наследование. Ваш типизированный DataSet наследуется от базового DataSet, что не позволяет использовать другие базовые классы.

4)Что такое Disconnected модель доступа к данным?

Disconnected модель доступа к данным – это тип доступа к данным, при использовании которого необходимо установить соединение с базой данных только для изменения или получения ее содержимого.

5)Что такое DiffGramm, для чего применяется?

DiffGramm-документ содержит всю информацию о данных объекта DataSet , включая первоначальное и текущее значение строк. Эти сведения можно использовать для проведения слияния объектов Dataset или обновления базы данных.

Для идентификации изменений в DataSet существует метод GetChanges, который предоставляет удобный способ выборки изменений в виде DataSet или

DataTable той же структуры, что и исходный DataSet или DataTable. Однако ADO.NET

предоставляет еще один удобный механизм четкой идентификации изменений в DataSet или

DataTable с помощью средства diffgram.

Diffgram — это всего лишь XML-представление автономного кэша с узлом, который четко

идентифицирует выполненные изменения. Когда изменения извлечены в виде мини-объекта DataSet той же структуры, что и исходный DataSet, можно использовать второй метод — Merge — чтобы занести эти изменения в находящийся в другом месте существующий DataSet.

6)Как отобразить в DataGrid лишь те записи DataTable1, которые были изменены(Modified) и значение поля ID которых меньше 20? Приведите фрагмент кода.

dataSet1 = testDataSet.GetChanges();if (dataSet1 == null) return;this.bindingSource1.DataSource = this.dataSet1;

this.bindingSource1.DataMember = "Animals";

dataGridView1.DataSource = bindingSource1;

dataGridView1.Refresh();

7) Что такое отношение Многие ко Многим? Как реализовать такое отношение в БазеДанных. Как реализовать это отношение в DataSet?

Такое отношение между двумя сущностями реализуется через таблицу - связку.
create table Items1(Item1ID int not null, ... , primary key Item1ID);
create table Items2(Item2ID int not null, ... , primary key Item2ID);
create table ItemLinks(Item1ID int not null, Item2ID int not null, ... , primary key (Item1ID, Item2ID));
впрочем, последнего primary key может и не быть - в случае если конкретные Item1 и Item2 могут быть связаны больше одного раза. Вообще, для полноты картины следовало бы в create table ItemLinks добавить
foreign key (Item1ID) references Items1(Item1ID),
foreign key (Item2ID) references Items2(Item2ID)

8) В чем разница между методами AcceptChanges и Update? Какой из них надо использовать в каком случае?

Метод UpDate позволяет передать в хранилище данных отложенные изменения, хранящиеся в объекте DataTable или DataSet.

Метод AcceptChanges Сохраняет все изменения, внесенные в класс DataSet после его загрузки или после последнего вызова метода AcceptChanges. Классы DataRow и DataTable также содержат методы AcceptChanges. Вызов метода AcceptChanges на уровне объекта DataTable приводит к вызову метода AcceptChanges для каждого объекта DataRow. Аналогично, вызов метода AcceptChanges для класса DataSet приводит к вызову метода AcceptChanges для каждой таблицы внутри класса DataSet. Таким образом существует несколько уровней, на каждом из которых можно вызвать этот метод. Если метод AcceptChanges вызван для класса DataSet, то его можно также вызвать для всех объектов низшего уровня (например таблицы и строки) одновременно.

Вызов метода AcceptChanges для класса DataSet завершает изменение любого объекта DataRow, находящегося в режиме изменения. Свойство RowState каждого объекта DataRow также изменяется: строки с типами Added и Modified получают тип Unchanged; строки с типом Deleted удаляются.

9) Опишите жизненный цикл DataRow: нарисуйте граф состояний, обьясните что означает то или иноне состояние.

(если это проще, то можно не рисовать, а описать словами)

Значение Detached означает, что запись не относится к объекту DataTable. После добавления ее статус изменяется на Added - теперь она существует в объекте DataTable, но ее нет в базе данных. Конечно, здесь мы не рассматривали взаимодействие с источником записей, но это же значение будет у записей, добавляемых в DataGrid после вывода данных из базы при наличии подключения. Вызывая метод AcceptChanges объекта DataTable, мы принимаем все изменения, поэтому статус DataRow изменяется на Unchanged - теперь запись считается "своей", она не была изменена после вызова метода. После вызова метода Delete запись помечается удаленной - она еще не полностью удалена, в случае отмены изменений статус будет восстановлен. Действительно, вызывая метод RejectChanges объекта DataTable, мы восстанавливаем запись до состояния Unchanged.

10) Для чего предназначен DataView?

Объекты – представители класса DataView НЕ ПРЕДНАЗНАЧЕНЫ для организации визуализации объектов DataTable.

Их назначение – простой последовательный доступ к строкам таблицы. Объекты DataView являются средством перебора записей таблицы. При обращении ЧЕРЕЗ объект DataView к таблице получают данные, которые хранятся в этой таблице.

DataView нельзя рассматривать как таблицу. DataView не может обеспечить представление таблиц. Также DataView не может обеспечить исключения и добавления столбцов. Таким образом, DataView НЕ является средством преобразования исходной информации, зафиксированной в таблице.

Комментариев нет:

Отправить комментарий