Файл: 1_C#_Введение_в_программирование_Уч_пособ_(Марченко-2005).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2025
Просмотров: 1369
Скачиваний: 3
Приложение-потребитель данных. Объект-представитель класса DataSet представляет НАБОР ДАННЫХ – хранилище данных на локальном компе.
Посредник между потребителем и базой данных. Провайдер данных Data Provider.
База данных. Хранилище информации.
ADO.NET. Объектная модель |
|
|
Отсоединенные объекты |
Подсоединенные объекты |
|
DataSet |
|
Connection |
DataTable |
DataView |
Transaction |
|
|
|
DataRow |
DataAdapter |
|
DataColumn |
Comand |
|
Constraint |
|
Parameter |
DataRelation |
|
DataReader |
Отсоединенные объекты объектной модели ADO.NET. Им посвящаются следующие главы пособия.
DataTable
Каждый объект DataTable представляет одну таблицу. Таблица в каждый конкретный момент своего существования характеризуется:
СХЕМОЙ таблицы,
СОДЕРЖИМЫМ таблицы (информацией).
При этом СХЕМА таблицы (структура объекта DataTable) определяется двумя наборами:
211
множеством столбцов таблицы (набор DataColumns, состоящий из множества объектов DataColumn),
множеством ограничений таблицы (набор Constraints, состоящий из множества объектов Constraint).
События класса DataTable
В члассе определены четыре события, которые позволяют отслеживать и в случае необходимости отменять значения данных.
1. Изменения строк. Позволяют отслеживать и при необходимости отменять изменения данных.
DataRowChanging – изменения вносятся в строку таблицы. Объявление соответствующего обработчика события имеет вид:
private static void Row_Changing( object sender, DataRowChangeEventArgs e )
DataRowChanged – изменения внесены в строку таблицы. Объявление соответствующего обработчика события имеет вид:
private static void Row_Changed( object sender, DataRowChangeEventArgs e )
private static void DataTableRowChange()
{
DataTable custTable = new DataTable("Customers");
//Добавляем столбики. custTable.Columns.Add( "id", typeof(int) );
custTable.Columns.Add( "name", typeof(string) );
//Определяем первичный ключ. custTable.Columns[ "id" ].Unique = true;
custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };
//Добавляем RowChanging event handler для нашей таблицы. custTable.RowChanging += new DataRowChangeEventHandler( Row_Changing );
//Добавляем a RowChanged event handler для нашей таблицы. custTable.RowChanged += new DataRowChangeEventHandler( Row_Changed );
//Добавляем строки.
for( int id=1; id<=10; id++ )
{
custTable.Rows.Add(
new object[] { id, string.Format("customer{0}", id)} );
}
custTable.AcceptChanges();
//Изменяем значение поля name во всех строках.
//Скромненько так все имена убираются, а на их место
//подставляется странное буквосочетание, состоящее из
//префикса vip и значения поля id каждого клиента.
//Была customer129 - стала vip129.
foreach( DataRow row in custTable.Rows )
{
row["name"] = string.Format( "vip{0}", row["id"] );
}
}
//И после такого вмешательства результаты становятся известны
//обработчику события. Row_Changing. А толку-то…
private static void Row_Changing( object sender, DataRowChangeEventArgs e )
{
Console.WriteLine( "Row_Changing Event: name={0}; action={1}", e.Row["name"], e.Action );
}
212
// Аналогично устроен обработчик. Row_Changed.
private static void Row_Changed( object sender, DataRowChangeEventArgs e )
{
Console.WriteLine( "Row_Changed Event: name={0}; action={1}", e.Row["name"], e.Action );
}
Параметр обработчика события DataRowChangeEventArgs обладает двумя свойствами (Action и Row), которые позволяют определить изменяемую строку и выполняемое над строкой действие. Действие кодируется значениями специального перечисления:
enum RowDataAction
{
Add,
Change,
Delete,
Commit,
Rollback, Nothing
}
2. Изменения полей (элементов в строках таблицы)
DataColumnChanging – изменения вносятся в поле строки данных. Объявление соответствующего обработчика события имеет вид:
private static void Column_Changing( object sender, DataColumnChangeEventArgs e )
DataColumnChanged – изменения были внесены в поле строки данных. Объявление соответствующего обработчика события имеет вид:
private static void Column_Changed( object sender, DataColumnChangeEventArgs e )
Параметр |
обработчика события |
DataColumnChangeEventArgs e обладает тремя |
|
свойствами. |
|
|
|
|
|
|
|
Свойство |
|
Описание |
|
Column |
|
Gets the DataColumn with a changing value. |
|
ProposedValue |
|
Gets or sets the proposed new value for the column. Новое значение |
|
|
|
для поля в строке. |
|
Row |
|
Строка, содержащая запись с изменяемым (изменённым) значением. |
|
Пример аналогичного содержания. Только теперь реакция на модификацию столбца (поля), а не строки.
private static void DataTableColumnChanging()
{
DataTable custTable = new DataTable("Customers"); // add columns
custTable.Columns.Add( "id", typeof(int) ); custTable.Columns.Add( "name", typeof(string) );
// set PrimaryKey
custTable.Columns[ "id" ].Unique = true;
custTable.PrimaryKey = new DataColumn[] { custTable.Columns["id"] };
// add a ColumnChanging event handler for the table.
custTable.ColumnChanging += new DataColumnChangeEventHandler( Column_Changing ); // add a ColumnChanged event handler for the table.
custTable.ColumnChanged += new DataColumnChangeEventHandler( Column_Changed );
// add ten rows
for( int id=1; id<=10; id++ )
{
custTable.Rows.Add(
new object[] { id, string.Format("customer{0}", id)} );
}
213
custTable.AcceptChanges();
// Изменяем значение поля name во всех строках. foreach( DataRow row in custTable.Rows )
{
row["name"] = string.Format( "vip{0}", row["id"] );
}
}
private static void Column_Changing( object sender, DataColumnChangeEventArgs e )
{
Console.WriteLine
("Column_Changing Event: name={0}; Column={1}; proposed name={2}", e.Row["name"],
e.Column.ColumnName, e.ProposedValue );
}
private static void Column_Changed( object sender, DataColumnChangeEventArgs e )
{
Console.WriteLine
("Column_Changed Event: name={0}; Column={1}; proposed name={2}", e.Row["name"],
e.Column.ColumnName, e.ProposedValue );
}
DataColumns
Прежде всего!
DataColumnCollection задаёт схему таблицы, определяя тип данных каждой колонки.
В классе DataTable объявлено get-свойство DataColumns.
С помощью которого может быть получена коллекция принадлежащих таблице столбцов.
public DataColumnCollection Columns {get;}
Возвращается коллекция объектов-представителей класса DataColumn таблицы. Если у объекта-таблицы нет столбцов, возвращается null.
Объекты-представители класса DataColumn образуют набор DataColumns, который является обязательным элементом каждого объекта-представителя класса DataTable. Эти объекты соответствуют столбцам таблицы, представленной объектом-представителем класса DataTable. Объект DataColumn содержит информацию о структуре столбца (метаданные). Например, у этого объекта имеется свойство, Type, описывающее тип данных столбца. Также имеются свойства ReadOnly, Unique, Default, AutoIncrement, которые, в частности,
позволяют ограничить диапазон допустимых значений поля и определить порядок генерации значений для новых данных.
Представляет тип колонки в DataTable. Это стандартный блок, предназначенный
для построения схемы |
DataTable. |
характеризуется собственным типом, |
Каждый DataColumn |
как элемент схемы |
который определяет тип значений, которые DataColumn содержит. Если объект DataTable создаётся как отсоединённое хранилище информации, представляющее таблицу базы данных, тип столбца объекта-таблицы должен соответствовать типу столбца таблицы в базе данных.
DataRows
СОДЕРЖИМОЕ таблицы (данные) задаётся набором DataRows – это конкретное множество строчек таблицы, каждая из которых является объектом-представителем класса DataRow.
Его методы и свойства представлены в таблице.
214
Открытые свойства
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 |
(унаследовано |
от |
Возвращает Type текущего экземпляра. |
|
|
Object) |
|
|
|
|
|
|
|
|
|
||
HasVersion |
|
|
Возвращает значение, показывающее, существует ли |
||
|
|
|
указанная версия. |
|
|
IsNull |
|
|
Перегружен. Возвращает значение, показывающее, содержит |
||
|
|
|
ли нулевое значение указанный столбец. |
|
|
RejectChanges |
|
Отменяет все значения, выполненные со строкой после |
|||
|
|
|
последнего вызова AcceptChanges. |
|
|
SetColumnError |
|
Перегружен. Устанавливает описание ошибки для столбца. |
|||
|
|
|
|||
SetParentRow |
|
Перегружен. Устанавливает родительскую строку DataRow. |
|||
|
|
|
|
||
ToString |
(унаследовано |
от |
Возвращает String, который представляет текущий Object. |
||
Object) |
|
|
|
|
|
|
|
|
|
|
|
Защищенные методы |
|
|
|
|
|
Finalize |
(унаследовано |
от |
Переопределен. Позволяет объекту |
Object |
попытаться |
Object) |
|
|
освободить ресурсы и выполнить |
другие |
завершающие |
|
|
|
операции, перед тем как объект Object будет уничтожен в |
||
|
|
|
процессе сборки мусора. |
|
|
|
|
|
В языках C# и C++ для функций финализации используется |
||
|
|
|
синтаксис деструктора. |
|
|
MemberwiseClone |
|
Создает неполную копию текущего Object. |
|
||
(унаследовано от Object) |
|
|
|
|
|
215