Читайте также:
|
|
Объект DataSet явл представлением реляцион данных, находящимся в памяти. Объект DataSet — это создаваемый в оператив памяти набор таблиц (объектов DataTablе), связанных м-ду собой отношениями и снабженными средствами проверки целостности данных (для них в DataSet предусмотрены свои объекты).
DataSet – зто класс, содержащий внутри себя три внутренних строго типизированных коллекции:
Ч-з св-во Tables объекта DataSet можно получить доступ к отдельн объектам DataTable, к-ые хранятся в колл DataTableCollection. Ч-з др св-во — Relations, можно получить доступ к объектам DataRelation, из колл DataRelationCollection. Поскольку DataSet — это фактически представление БД, к-ое помещается в операт память клиента (и с к-ой можно работать при разорванном соедин), то в этой модели объекты DataRelation представляют отношения м-ду таблицами БД.
Напр, предположим, в одной табл сущ внешний ключ, ссылающийся на первич ключ в др таблице. Это отношение представлено объектом DataRelation (и его можно добавить в DataSet при пом св-ва DataSet.Relations). После этого мы можем использовать это отношение при выполнении запросов к таблицам.
Св-во ExtendedProperties обеспечивает доступ к объектам, хранящимся в коллекции PropertyCollection. Осн назначение всей этой конструкции со св-вом ExtendedProperties и коллекцией PropertyCollection – обеспечить возможность ассоциировать доп инф-ю (в виде пар имя-значение) с объектом DataSet. В принципе этой доп инф-ей может быть все, что угодно. Напр, можно самостоят определить, что у нашего объекта DataSet будет св-во Company Name, а в кач-ве значения этого св-ва указать имя компании. Выглядеть это будет так. Создаем объект DataSet и добавляем для него некотор доп информацию (метаданные):
DataSet ds =new DataSet('MyDataSet");
ds.ExtendedPropertles.Add("CompanyName", "InterTech_Inc"):
// Выводим информацию о только что созданных метаданных:
Console.WriteLine(ds.ExtendedProperties["CompanyName"].ToString());
Можно использовать расширенные св-ва для хранения самой разной инф-и — напр, о внутреннем пароле для доступа к данным, об интервале синхронизации данных и т. п. Кроме того, расширенные св-ва (то есть свойство ExtendedProperties) предусмотрены не только для DataSet, но и для DataTable.
Рассмотрим наиболее важные св-ва DataSet. Эти св-ва обеспечивают доступ к внутр коллекциям DataSet, позволяют представлять данные из DataSet в формате XML и обеспечивают возможность получения инф-и об ошибках:
CaseSensitive – Определяет, будет ли во время операций по сравнению текстовых строк в объектах DataTable учитываться регсстр букв.
DataSetName – позволяет получить или задать имя для данного объекта DataSet. Обычно значение этого св-ва задается как параметр, передаваемый констр-ру.
DefaultViewManager – позволяет определить представление по умолчанию для отображения данных в DataSet.
EnforceConstraints – позвол-т отключить (включить снова) проверку соответствия огратчеюям при выполнении операций обновления данных в DataSet.
HasErrors – позволяет получить значение, определяющее наличие ошибок в DataSet (то есть ошибок в любой строке любой таблицы DataSet)
Relations – позвол-т обратиться к коллекции отношеюй между таблицами DataSet
Tables – позволяет получить доступ к коллекции таблиц DataSet
Многие методы DataSet дублируют возможности, к-ые обеспечив св-вами. Помимо взаимодействия с потоками данных в формате XML, методы DataSet позволяют копировать содержимое DataSet, устанавливать начало и конец пакетных изменений данных в DataSet и т. п. Самые важные методы DataSet:
AcceptChanges() – позволяет сохранить в DataSet все изменения, произведенные с момента последнего вызова этого метода
Clear() – полная очистка DataSet – удаляются все строки из всех таблиц
Clone() – клонирует структуру DataSet, включая структуру таблиц, отношения между таблицами и ограничения
Copy() – копирует DataSet (структуру вместе с данными)
GetChanges() – возвращает копию DataSet, которая содержит все изменения, внесенные в оригинальный DataSet с момента последнего вызова для него метода AcceptChanges().
GetChildRelations() – возвращает коллекцию подчиненных отношений до указанной таблицы.
GetParentRelations() – возвращает коллекцию родительских отношений до указанной таблицы.
HasChanges() – этот перегруж метод позволяет получить инф-ию об изменениях, внесенных в DataSet (отдельно по вставленным, удаленн и измененным строкам)
Merge() – этот перегруженный метод позволяет производить слияние разных объектов DataSet.
ReadXml(),ReadXmlSchema() – позволяет считывать данные в формате XML в DataSet из потока (файла, оперативной памяти, сетевого ресурса)
RejectChanges() – отменяет все изменения, внесенные в DataSet с момента его создания или последнего вызова AcceptChanges()
WriteXml(), WriteXmlSchema() – позволяет записать данные в форммате XML из DataSet в поток.
Создание объекта DataSet программным способом:
Console.WriteLine("****************** Работа с объектами DataSet ********");
DataSet MyDS = new DataSet("Turisti of BDTurfirm");
Console.WriteLine("Имя объекта DataSet " + MyDS.DataSetName);
Console.WriteLine("Расширенные свойства объекта DataSet: штамп времени (временная метка), название компании, уникальный идентификатор");
MyDS.ExtendedProperties["TimeStamp"] = DateTime.Now;
MyDS.ExtendedProperties["Compani"] = "Турфирма NNN";
MyDS.ExtendedProperties["DataSetId"] = Guid.NewGuid();
Использование визуального подхода для демонстрации работы объекта DataSet: Чтобы проиллюстр применение DataSet на практике, создадим приложение Windows Forms. В этом прилож будет использ-ся объект DataSet с 6 внутренними табл (объектами DataTable) — Туристы, Инф о туристах, Путевки, Оплаты, Сезоны и Туры. В каждой табл будет свой первич ключ, при этом система первичн и внеш ключей таблиц позволит использ объекты DataRelation для моделирования отнош м-ду таблиц. Общая стр-ра БД, к-ую нужно реализ при пом объекта DataSet:
21. Таблицы и поля: объекты DataTable и DataColumn
Объект DataSet представляет собой буфер для хранения данных из базы, локальную копию взаимосвязанных таблиц. Этот буфер предназначен для хранения структурированной информации, представленной в виде таблиц. В связи с этим первым, самым очевидным вложенным объектом DataSet, является DataTable. Тип DataSet – это контейнер, используемый для любого числа объектов DataTable. Внутри одного объекта DataSet может храниться неск-ко загруженных таблиц из БД, помещенных в соответствующие объекты DataTable.
Всякая таблица состоит из столбцов (называемых также полями или клонками) и строк (записей). Для обращения к ним и для управления столбцами и строками в объекте DataTable предназначены специальные объекты – DataColumn и DataRow.
Изучим объект DataColumn. Он представляет отдельный столбец в пределах DataTable. DataColumn – это блок для создания схемы DataTable. Каждый объект DataColumn имеет свойство DataType, которое определяет тип данных, содержащихся в каждом объекте DataColumn. Например, можно ограничить тип данных до целых, строковых и десятичных чисел. Поскольку данные, содержащиеся в DataTable, обычно переносятся обратно в исходный источник данных, необходимо согласовывать тип данных с источником.
Свойства класса DataColumn:
АllowDBNull – Указывает, может ли данный столбец содержать пустые значения. По умолчанию содержит значение true.
AutoIncrement, AutoIncrementSeed, AutoIncrementStep – Применяются для настройки поведения автоинкремента для данного столбца. Это может оказаться удобным, если нужно обеспечить уникальность значений в этом DataColumn (например, если он содержит первичные ключи). По умолчанию DataColumn не поддерживает автоинкрементное поведение.
Caption – Задает или получает заголовок, к-ый должен отображаться для данного столбца. Это позволяет определить более наглядные варианты для имен столбцов в БД.
ColumnMapping – Определяет представление DataColumn при сохранении DataSet в виде XML-документа с помощью метода DataSet.WriteXml(). Можно указать, что столбец данных должен быть записан как XML-элемент, XML-атрибут, простое текстовое содержимое, либо его следует полностью проигнорировать.
ColumnName – Задает или получает имя столбца из коллекции Columns (т.е. его внутреннее представление в DataTable). Если не занести значение в ColumnName явно, то по умолчанию там находится слово *Column* с числовыми суффиксами по формуле n+1 (т.е. Column1, Column2, Column3 и т.д.)
DataType – определяет тип данных (логический, строковый, с плавающей точкой и т.д.), хранящихся в данном столбце
DefaultValue – Задает или получает значение по умолчанию, заносимое в данный столбец при вставке новых строк
Expression – Задает или получает выражение для фильтрации строк, вычисления значения столбца или создания агрегированного столбца
Ordinal – Задает или получает числовое положение столбца в коллекции Columns, содержащейся вDataTable.
ReadOnly – Определяет, предназначен ли данный столбец только для чтения после добавления строки в таблицу. По умолчанию равноfalse.
Table – Получает объектDataTable, содержащий данныйDataColumn
Unique – Задает или получает значение, указывающее, должны ли быть уникальными значения во всех строках данного столбца, или допустимы совпадения. При присвоении столбцу ограничения первичного ключа свойствоUnique должно содержать значениеtrue
Создание объектов DataColumn:
Console.WriteLine("Создание объектов DataColumn, отображающих реальные столбцы таблицы Туристы");
DataColumn cod = new DataColumn("Код туриста", typeof(int));
cod.Caption = "Код туриста";
cod.ReadOnly = true;
cod.AllowDBNull = false;
cod.Unique = true;
DataColumn fam = new DataColumn("Фамилия", typeof(string));
fam.Caption = "Фамилия";
fam.ReadOnly = false;
fam.AllowDBNull = true;
fam.Unique = false;
DataColumn name = new DataColumn("Имя", typeof(string));
name.Caption = "Имя";
name.ReadOnly = false;
name.AllowDBNull = true;
name.Unique = false;
DataColumn ot = new DataColumn("Отчество", typeof(string));
ot.Caption = "Отчество";
//Свойство Caption используется для отображения названия столбца при выводе данных.
cod.AutoIncrement=true;
cod.AutoIncrementSeed = 0;
cod.AutoIncrementStep = 1;
//При добавлении строк в таблицу значение столбца cod увеличится //на 1.Начальное значение столбца 0.
Тип DataColumnобычно не существует автономно, а добавляется в соответствующий объект DataTable:
Console.WriteLine("Создание объекта DataTable и вставка объектов DataColumn в коллекцию столбцов:");
DataTable Turistes = new DataTable("Туристы");
Turistes.Columns.AddRange(new DataColumn[] { cod, fam, name, ot });
Теперь объект DataTable Turistes содержит четыре объекта DataColumn, которые представляют схему находящейся в памяти таблицы Turistes. Пока эта таблица не содержит данных и не входит в коллекцию таблиц, принадлежащих конкретному DataSet. Начнем с заполнения таблицы с помощью объекта DataRow.
22. Строки: объект DataRow
Содержимое таблицы (непосредственно данные) задается набором DataRows – это конкр-е мн-во строк таблицы, каждая из к-ых явл объектом-представителем класса DataRow. Его методы и свойства представлены в таблице.
Свойства | |||
HasErrors | Возвращает значение, показывающее, есть ли ошибки в строке | ||
Item | Перегружен. Возвращает или задает данные, сохраненные в указанном столбце. В языке C# это свойство является индексатором класса DataRow | ||
ItemArray | Возвращает или задает все значения для этой строки с помощью массива | ||
RowError | Возвращает или задает пользовательское описание ошибки для строки | ||
RowState | Возвращает текущее состояние строки по отношению к DataRowCollection | ||
Table | Возвращает объект DataTable, содержащий данную строку | ||
Методы | |||
AcceptChanges | Сохраняет все изменения, сделанные с этой строкой со времени последнего вызова AcceptChanges | ||
BeginEdit | Начинает операцию редактирования объекта DataRow | ||
CancelEdit | Отменяет текущее редактирование строки | ||
ClearErrors | Удаляет ошибки в строке, включая RowError и ошибки, установленные SetColumnError | ||
Delete | Удаляет DataRow | ||
EndEdit | Прекращает редактирование строки | ||
Equals(унаследовано отObject) | Перегружен. Определяет, равны ли два экземпляра Object | ||
GetChildRows | Перегружен. Возвращает дочерние строки DataRow | ||
GetColumnError | Перегружен. Возвращает описание ошибки для столбца | ||
GetColumnsInError | Возвращает массив столбцов, имеющих ошибки | ||
GetHashCode(унаследовано от Object) | Служит хэш-функцией для конкретного типа, пригоден для использования в алгоритмах хэширования и в структурах данных, например в хэш-таблице | ||
GetParentRow | Перегружен. Возвращает родительскую строку DataRow | ||
GetParentRows | Перегружен. Возвращает родительские строки DataRow | ||
GetType(унаследовано от Object) | Возвращает Type текущего экземпляра | ||
HasVersion | Возвращает значение, показывающее, существует ли указанная версия | ||
IsNull | Перегружен. Возвращает значение, показывающее, содержит ли нулевое значение указанный столбец | ||
RejectChanges | Отменяет все значения, выполненные со строкой после последнего вызова AcceptChanges | ||
SetColumnError | Перегружен. Устанавливает описание ошибки для столбца | ||
SetParentRow | Перегружен. Устанавливает родительскую строку DataRow | ||
ToString(унаследовано от Object) | Возвращает объект типа String, который представляет текущий Object | ||
Защищенные методы | |
Finalize(унаследовано от Object) | Переопределен. Позволяет объекту Object попытаться освободить ресурсы и выполнить другие завершающие операции перед тем как объект Object будет уничтожен в процессе сборки мусора. В языках C# и C++ для функций финализации используется синтаксис деструктора |
MemberwiseClone(унаследовано от Object) | Создает неполную копию текущего объекта Object |
SetNull | Устанавливает значение указанного DataColumn на нулевое |
Элементы набора DataRows являются объектами класса DataRow. В этом классе обеспечивается несколько вариантов реализации свойства Item, которые обеспечивают навигацию по множеству записей объекта DataTable и сохранение текущих изменений данных, сделанных за текущий сеанс редактирования базы. Посредством набора Rows реализуется возможность ссылки на любую запись таблицы. К любой записи можно обратиться напрямую, и поэтому не нужны методы позиционирования и перемещения по записям таблицы. По множеству строк позиционирование проводится по целочисленному значению индекса. Выбор записи в строке производится по строковому значению, которое соответствует имени столбца.
Работа с типом DataRow отличается от работы с DataColumn, так как у него нет общедоступного конструктора:
DataRow r=new DataRow(); // Ошибка!
Однако новый DataRow можно получить из конкретного DataTable. Допустим, нужно вставить две строки в таблицу Turistes. Метод DataTable.NewRow() добавляет строку в таблицу, а затем нужно с помощью индексатора типа добавить в каждый столбец данные:
Console.WriteLine("Добавление строк в таблицу Turistes:");
DataRow r = Turistes.NewRow();
Console.WriteLine("Состояние строки " + r.RowState);
r["Код туриста"] = 0;
r["Фамилия"] = "Nareyko";
r["Имя"] = "Nina";
r["Отчество"] = "Nikolaewna";
Turistes.Rows.Add(r);
r = Turistes.NewRow();
r["Код туриста"] = 1;
r["Фамилия"] = "Zenko";
r["Имя"] = "Sergej";
r["Отчество"] = "Iwanowich";
Turistes.Rows.Add(r);
Индексатор класса DataRow позволяет получить доступ к объекту DataColumn как по числовому индексу столбца, так и по его имени.
Дата добавления: 2015-09-10; просмотров: 107 | Поможем написать вашу работу | Нарушение авторских прав |