Чтение онлайн

на главную - закладки

Жанры

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

Таблица 22.13. Значения перечня DataRowState

Значение Описание
Added Строка была добавлена в DataRowCollection, но метод AcceptChanges не вызывался
Deleted Строка была удалена с помощью метода Delete объекта DataRow
Detached Строка была создана, но не является частью коллекции DataRowСollection. Объект DataRow находится в этом состоянии после своего создания до того, как будет добавлен к коллекции (или же после удаления этого объекта из коллекции)
Modified Строка
была изменена, но метод AcceptChanges не вызывался
Unchanged Строка не изменилась со времени последнего вызова AcceptChanges

Во время программных манипуляций строками объекта DataTable свойство RowState устанавливается автоматически.

static void Маin(string[] args) {

 …

 DataRow carRow = InventoryTable.NewRow;

 // Выводит 'Состояние строки: Detached.'

 Console.WriteLine("Сoстояние строки: {0}.", carRow.RowState);

 carRow["Make"] = "BMW";

 carRow["Color"] = "черный";

 carRow["PetName"] = "Hamlet";

 inveritoryTable.Rows.Add(carRow);

 // Выводит 'Состояние строки: Added.'

 Console.WriteLine("Состояние строки: {0}.",

 inventoryTable.Rows[0].RowState);

}

Как видите, DataRow в ADO.NET является достаточно "сообразительным" для того, чтобы контролировать текущее положение вещей. Поэтому, имея DataTable, вы можете выяснить, какие строки были изменены. Эта особенность DataSet очень важна, поскольку именно она при отправке обновленной информации в хранилище данных позволяет отправлять только измененные данные.

Работа с DataTable

Тип DataTable определяет большое количество членов, многие из которых по именам и возможностям идентичны членам DataSet. В табл. 22.14 предлагаются описания основных свойств типа DataTable, за исключением Rows и Columns.

Таблица 22.14. Основные свойства типа DataTable

Свойство Описание
CaseSensitive Индикатор необходимости учета регистра символов при сравнении строк в пределах таблицы. Значением по умолчанию является false (ложь)
ChildRelations Возвращает коллекцию дочерних отношений для данного объекта DataTable (если таковые имеются)
Constraints Возвращает коллекцию ограничений, поддерживаемых таблицей
DataSet Возвращает объект DataSet, содержащий данную таблицу (если таковой имеется)
DefaultView Возвращает пользовательское представление таблицы, которое может включать фильтр или позицию курсора
MinimumCapacity Читает или устанавливает значение для начального числа строк данной таблицы (это значение по умолчанию равно 25)
ParentRelations Возвращает коллекцию родительских отношений для данного объекта DataTable
PrimaryKey Читает или устанавливает массив столбцов, функционирующих в качестве первичных ключей для таблицы данных
RemotingFormat Позволяет определить, как объект DataSet должен выполнять сериализацию соответствующего содержимого (в двоичном или XML-формате) для слоя удаленного взаимодействия .NET. Это свойство появилось в .NET 2.0
TableName Читает
или устанавливает имя таблицы. Это же свойство может быть указано в качестве параметра конструктора

В нашем примере мы установим свойство PrimaryKey типа DataTable равным объекту carIDColumn типа DataColumn.

static void Main(string[] args) {

 …

 // Установка первичного ключа для таблицы.

 inventoryTable.PrimaryKey = new DataColumn[] { inventoryTable.Columns[0] };

}

На этом создание примера для DataTable завершается. Заключительным шагом будет вставка DataTable в DataSet-объект carsInventoryDS. Затем объект DataSet нужно оформлять вспомогательному методу PrintDataSet (который ещё предстоит написать).

static void Main(string[] args) {

 …

 // Наконец, добавление таблицы в DataSet.

 carsInventoryDS.Tables.Add(inventoryTable);

 // Теперь вывод данных DataSet.

 PrintDataSet(carsInventoryDS);

}

Метод PrintDataSet просто выполняет цикл по всем DataTable из DataSet. печатая имена столбцов и значения строк с помощью индексатора типа.

static void PrintDataSet(DataSet ds) {

 Console.WriteLine("Таблицы в DataSet '{0}'.\n", ds.DataSetName);

 foreach (DataTable dt in ds.Tables) {

Console.WriteLine("Таблица {0}.\n", dt.TableName);

// Вывод имен столбцов.

for (int curCol = 0; curCol ‹ dt.Coumns.Count; curCol++) {

Console.Write(dt.Columns[curCol].ColumnName.Trim + ''\t");

}

Console.WriteLine("\n--------------------------------");

// Вывод DataTable.

for (int curRow = 0; curRow ‹ dt.Rows.Count; curRow++) {

for (int curCol = 0; curCol ‹ dt.Columns.Count; curCol++) {

Console.Write(dt.Rows[curRow][curCol.ToString + "\t");

}

Console.WriteLine;

}

 }

}

Вывод программы показан на рис. 22.12.

Рис. 22.12. Содержимое объекта DataSet примера

Работа с DataTableReader в .NET 2.0

Тип DataTable предлагает еще целый ряд методов, кроме тех, что уже были нами рассмотрены. Подобно DataSet, тип DataTable поддерживает, например, методы AcceptChanges, GetChanges, Сору и ReadXml/WriteXml. В .NET 2.0 тип DataTable поддерживают также метод CreateDataReader. Этот метод позволяет получить данные DataTable, используя схему, соответствующую схеме навигации объекта чтения данных (только вперед и только для чтения). Для примера создайте новую вспомогательную функцию PrintTable, реализованную следующим образом.

private static void PrintTable(DataTable dt) {

 Console.WriteLine("\n***** Строки в DataTable *****");

 // Получение нового для .NET 2.0 типа DataTableReader.

 DataTableReader dtReader = dt.CreateDataReader;

 // DataTableReader работает подобно DataReader.

 while (dtReader.Read) {

for (int i = 0; i ‹ dtReader.FleldCount; i++) {

Поделиться:
Популярные книги

Часовая башня

Щерба Наталья Васильевна
3. Часодеи
Фантастика:
фэнтези
9.43
рейтинг книги
Часовая башня

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Жена на пробу, или Хозяйка проклятого замка

Васина Илана
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Жена на пробу, или Хозяйка проклятого замка

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник