Работа с автономными данными в ADO.NET - Работа с DataSet в среде Visual Studio .NET
ОГЛАВЛЕНИЕ
Работа с DataSet в среде Visual Studio .NET
Создавать объекты DataSet можно как программно, так и с помощью среды Visual Studio. Для второго случая предназначена вкладка Data в панели инструментов. Для начала нужно перетащить на web или win-форму объект SqlDataAdapter. Затем в мастере создать новое подключение к БД, указав БД Northwind и способ доступа к БД как . После этого выберете таблицу Customers и отметьте все столбцы таблицы. Повторите процесс для таблицы Order, используя уже готовое соединение. Затем щелкните правой кнопкой мыши по панели с созданными DataAdapter 'ами, выберете из контекстного меню команду Generate DataSet. Отметьте галочками оба DataAdapter и нажмите на ОК.Добавленный объект DataSet отобразился в панели компонентов. Мы добавили т.н. DataSet со строгим контролем типов (типизированный DataSet ), о котором будем говорить позже. Структуру данных можно посмотреть в созданном файле с расширением xsd.
Другой путь создания типизированных датасетов - добавление в проект DataSet (через команду Add New Item) и "перетаскивание" на него таблиц БД из окна Server Explorer.
Работа с реляционными данными
Работа с реляционными данными осуществляется с помощью объектов класса DataRelation, связующие колонки DataColumn двух таблиц DataTable. Создать такой объект можно следующим образом:ds.Relationships.Add(new DataRelation(
"CustomersOrders", ds.Tables["Customers"].Columns["CustomerID"],
ds.Tables["Orders"].Columns["CustomerID"]);
DataTable tblParent = ds.Tables["ParentTable"];
DataColumn[] colsParent = new DataColumn[] {tblParent.Columns["ParentColumn1"], tblParent.Columns["ParentColumn2"]};
DataTable tblChild = ds.Tables["ChildTable"];
DataColumn[] colsChild = new DataColumn[] {tblChild.Columns["ChildColumn1"], tblChild.Columns["ChildColumn2"]};
ds.Relationships.Add(new DataRelation("ParentChild", colsParent, colsChild));
Работа со связанными данными
Основным применением объектов DataRelation является поиск связанных данных. Однако сам объект DataRelation не предоставляет такой функциональности, она реализуется методами класса DataRow: GetChildRow(), GetParentRow() и GetParentRows().Для поиска дочерних записей используется метод GetChildRow() соответсвующего объекта DataRow. Ему передается ему имя объекта DataRelation, определяющего отношение. Этот метод возвращает дочерние записи в виде массива объектов DataRow :
DataRow row = ds.Tables["Customers"].Rows[0];
foreach (DataRow rowOrder in row.GetChildRows("CustomersOrders"))
Console.WriteLine(rowOrder["OrderID"] + rowOrder["OrderDate"] + "\n");
DataRow rowOrder = ds.Tables["Orders"].Rows[0];
Console.WriteLine("\t" + rowOrder.GetParentRow("CustomersOrders")["ContactName"] + "\n");
В случае отношения <один ко многим> найти все родительские записи конкретного объекта DataRow можно с методом GetParentRows(), также принимающего название отношения и возвращающего массив родительских объектов.