Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_собственные.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
701.16 Кб
Скачать

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 как по числовому индексу столбца, так и по его имени.

Свойство RowState

Свойство RowState применяется для программной идентификации множества всех строк таблицы, которые изменили свое первоначальное значение, были вставлены и т.п. Это свойство может принимать любое значение из перечисления DataRowState Возможные значения приведены ниже:

Added – Строка была добавлена в DataRowCollection, а AcceptChanges() еще

не был вызван.

Deleted – Строка была помечена для удаления с помощью метода Delete() класса DataRow, a AcceptChanges() еще не был вызван.

Detached – Строка была создана, но не включена ни в какой DataRowCollection. Объект DataRow находится в этом состоянии после его создания, но до занесения в какую-либо коллекцию, либо после исключения из коллекции

Modified – Строка была изменена, a AcceptChanges() еще не был вызван.

Unchanged – строка не была изменена после последнего вызова AcceptChanges()

Console.WriteLine("Состояние строки " + r.RowState);

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

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

Основные члены типа DataTable

CaseSensitive – Указывает, чувствительны ли к регистру символов строковые сравнения в таблице. По умолчанию равно false

ChildRelations – Возвращает коллекцию дочерних отношений для данного DataTable (если они есть).

Constraints – Получ коллекцию ограничений, поддерживаемых данной таблицей

Сору() – Метод, копирующий схему и дату DataTable в новый экземпляр

DataSet – Получает DataSet, содержащий данную таблицу (если он есть)

DefaultView – Получает специализированное представление таблицы, к-ое может

содержать отфильтрованное представление или позицию курсора.

ParentRelations – Получ коллекцию родит-ких отношений для данного DataTable

PrimaгуКеу – Получ или задает массив столбцов, которые выступают в качестве первичных ключей для таблицы данных.

RemotingFormat – Позволяет определить формат сериализации объектом DataSet его содержимого (двоичный или XML) для уровня NET Remoting

TableName – Получ или задает имя таблицы. Значение этого свойства можно так же задать через параметр конструктора

Установим свойство PrimareKey (первичный ключ для таблицы) столбцу cod:

Console.WriteLine("Установка первичного ключа для таблицы:");

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

Наш объект DataTable Turistes создан. Осталось вставить его в объект DataSet с помощью коллекции Tables: MyDS.Tables.Add(Turistes);

Выведем содержимое объекта DataSet на экран:

Console.WriteLine("Данные DataSet:");

Console.WriteLine("Таблицы в DataSet:" + MyDS.DataSetName);

//Вывод имени DataSet и расширенных свойств:

foreach (System.Collections.DictionaryEntry de in MyDS.ExtendedProperties)

Console.WriteLine("Ключ " + de.Key + " , значение " + de.Value);

Console.WriteLine();

//Вывод каждой таблицы:ъ

foreach (DataTable dt in MyDS.Tables)

{

Console.WriteLine("Таблица :" + dt.TableName);

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

for (int curCol = 0; curCol < dt.Columns.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();

}

}

Тип DataTable поддерживает также метод CreateDataReader(). Этот метод позволяет получить данные DataTable, используя схему, соответствующую схеме навигации объекта чтения Datareader (только вперед и только для чтения):

DataTableReader dtReader=Turisres.CreateDataReader();

while (dtReader.Read())

{

for (int i=0; i<rdReader.FieldCount; i++)

Console.WriteLine(“dtReader.GetName(i) +” “+ dtReader.GetValue(i).ToString());

Console.WriteLine();

}

dtReader.Close();

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]