|
Программирование >> Программирование с использованием ajax
3. Добавьте следующий код в метод Main (): static void Main(string[] args) { Указать специфичную для SQL Server строку соединения SqlConnection thisConnection = new SqlConnection ( @ Data Source=.\SQLEXPRESS; + (a AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF; + @ Integrated Security=True;Connect Timeout=30;User Instance=true ); Создать объект DataAdapter для обновления и прочих операций SqlDataAdapter thisAdapter = new SqlDataAdapter( SELECT CustomerlD, CompanyName FROM Customers , thisConnection); Создать объект CommandBuilder для построения команд SQL SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); Создать DataSet для хранения таблиц данных, строк и столбцов DataSet thisDataSet = new DataSet (); Заполнить DataSet, используя запрос, определенный ранее для DataAdapter thisAdapter.Fill(thisDataSet, Customers ); Console.WriteLine( количество строк до изменения: {0} , thisDataSet.Tables[ Customers ].Rows.Count); Установить ключевой объект для определения первичного ключа DataColumn[] keys = new DataColumn[1]; Jceys [0] = thisDataSet .Tables [ Customers ] .Columns [ CustomerlD ] ; thisDataSet.Tables[ Customers ].PrimaryKey = keys; DataRow findRow = thisDataSet.Tables[ Customers ].Rows.Find( ZACZI ); if (findRow != null) Console.WriteLine( ZACZI уже присутствует в таблице Customers ); Console.WriteLine( Удаление ZACZI . . . ); findRow.Delete(); thisAdapter.Update(thisDataSet, Customers ); Console.WriteLine( количество строк после изменения: {0} , thisDataSet.Tables[ Customers ].Rows.Count) ; thisConnection.Close(); Console.Write( Программа завершена, нажмите Enter для продолжения: ); Console.ReadLine(); Описание полученных результатов Код создания DataSet и объект адаптера данных стандартны - вы их уже видели ранее в этой главе несколько раз, так что не станем повторяться. Различие между этим кодом и кодом предыдущего примера состоит в том, что если строка найдена, она удаляется! Обратите внимание, что при вызове Delete () строка из базы данных не удаляется до тех пор, пока не будет вызван метод Update () для фиксации изменений. Метод Delete () не удаляет строку - он лишь помечает ее для последующего удаления. Каждый объект DataRow в коллекции Rows имеет свойство RowState, которое отслеживает, когда строка удалена, добавлена, модифицирована или осталась неизменной. Метод Delete () устанавливает RowState строки в Deleted, и Update () затем удаляет из базы данных все строки, которые обнаружит в коллекции Rows с пометкой Deleted. То же касается метода Remove (); вызывайте его для удаления строк из коллекции Rows объекта DataSet, но не из самой базы данных. Доступ к нескольким таблицам в DataSet Одним из значительных преимуществ модели ADO.NET перед прежними моделями доступа к данным является то, что объект DataSet внутри себя отслеживает множество таблиц и отношений между ними. Это значит, что можно передавать целые наборы связанных данных между частями программы в одной операции, и архитектура самостоятельно поддерживает целостность отношений между данными. Отношения в ADO.NET Объект DataRelation используется для описания отношений между множеством объектов DataTable в DataSet. Каждый DataSet имеет коллекцию Relations объектов DataRelation, которая позволяет находить и манипулировать связанными данными. Давайте начнем с таблиц Customers и Orders. Каждый заказчик может иметь несколько заказов; как же увидеть заказы, размещенные каждым заказчиком? Каждая строка таблицы Orders содержит CustomerlD заказчика, разместившего его; вы сопоставляете все строки заказов, имеющие такое же значение CustomerlD, как у заказчика из таблицы Customers. Соответствующие поля CustomerlD в двух таблицах определяют отношение один ко многим между таблицами Customers и Orders. Вы можете использовать это отношение в ADO.NET, создав объект DataRelation для его представления. Создание объекта DataRelation DataSet имеет свойство Relations, которое является коллекцией всех объектов DataRelation, представляющих отношения между таблицами в DataSet. Чтобы создать новый DataRelation, используйте метод Add () объекта Relations, который принимает строковое имя отношения и два объекта DataColumn - родительский столбец, за которым следует дочерний столбец. Таким образом, чтобы создать описанное ранее отношение между столбцом CustomerlD таблицы Customers и столбцом CustomerlD таблицы Orders, необходимо использовать следующий синтаксис, присвоив отношению имя CustOrders: DataRelation custOrderRel = thisDataSet.Relations.Add( CustOrders , thisDataSet.Tables[ Customers ].Columns[ CustomerlD ], thisDataSet.Tables[ Orders ].Columns[ CustomerlD ]); Вы увидите этот синтаксис снова в следующем примере. Навигация по отношениям Чтобы использовать отношение, нужно перейти от строки в одной таблице к связанным с ней строкам в другой таблице. В базе данных Northwind строка таблицы Customers может считаться родительской, а каждая из связанных строк таблицы Orders - дочерней. Навигация также возможна и в обратном направлении. Извлечение дочерних строк Имея строку родительской таблицы, как можно получить все строки дочерней таблицы, связанные с нею? Вы можете извлечь набор дочерних строк методом GetChildRows () объекта DataRow. Объект DataRelation, который вы создали между родительской и дочерней таблицами, передается методу, а возвращается объект DataRowCollection, который представляет коллекцию связанных объектов DataRow в дочерней DataTable. Например, имея ранее созданный объект DataRelation, если заданная строка DataRow в родительской таблице DataTable (Customers) представлена объектом customerRow, то customerRow.GetChildRows(custOrderRel); возвращает коллекцию связанных объектов DataRow из таблицы Orders. Вы увидите, как обрабатывать этот набор объектов в следующем практическом занятии. Практическое занятие Полен связанных строк Выполните следующие шаги для создания примера DataRelationExample в Visual С# 2008. 1. Создайте новое консольное приложение по имени Delete Data в каталоге С:\BegVCSharp\Chapter28. 2. Начните с добавления директив using для классов ADO.NET, которые вы будете использовать: #region Using Directives using System; using System.Data; Использовать пространство имен ADO.NET using Sys tem. Data. SqlClient; Использовать пространство имен поставщика данных SQL Server using System.Collections.Generic; using System.Text; #endregion 3. Добавьте следующий код в метод Main (): static void Main(string[] args) { Указать специфичную для SQL Server строку соединения SqlConnection thisConnection = new SqlConnection( @ Data Source=.\SQLEXPRESS; + @ AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF; + (a Integrated Security=True;Connect Timeout=30;User Instance=true ); Создать объект DataAdapter для обновления и прочих операций SqlDataAdapter thisAdapter = new SqlDataAdapter( SELECT CustomerlD, CompanyName FROM Customers , thisConnection); Создать объект CommandBuilder для построения команд SQL SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter) ; Создать DataSet для хранения данных связанных таблиц, строк и столбцов DataSet thisDataSet = new DataSet(); Установить объекты DataAdapter для каждой таблицы и заполнить их SqlDataAdapter custAdapter = new SqlDataAdapter( SELECT * FROM Customers , thisConnection); SqlDataAdapter orderAdapter = new SqlDataAdapter( SELECT * FROM Orders , thisConnection); custAdapter.Fill(thisDataSet, Customers ); orderAdapter.Fill(thisDataSet, Orders );
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |