Страница 2 из 6 Использование объектов DataSet Ниже приводится пример использования объекта DataSet. Все примеры в статье используют БД Northwind БД MS SQL Server. stringconn ="Provider=SQLSQL;Data Source=(local)\\NetSDK; InitialCatalog=Northwind;Trusted_Connection=Yes;"; string query = "SELECT CustomerID, CompanyName, ContactName, Phone FROM Customers"; SqlDataAdapter da = new SqlDataAdapter(query, conn); DataSet ds = new DataSet(); da.Fill(ds, "Customers"); Вначале создаем строку соединения с БД и SQL запрос для получения данных. DataAdapter помещает результаты запроса в соответствующую таблицу DataTable, находящуюся в DataSet. С помощью перегруженного метода Fill можно помещать данные и напрямую в DataTable. Для одной таблицы можно несколько раз вызывать метод Fill, однако, если вызывать метод Fill для DataSet без явного указания имени таблицы, то эти данные будут помещаться в разные таблицы (например, "Table", "Table1", "Table2",). Для доступа к данным, находящимся в таблицу есть свойство Rows, возвращающее набор объектов DataRow DataTable table = ds.Tables[0]; DataRow row = table.Rows[0]; Console.WriteLine("OrderID: " + row["OrderID"]); Console.WriteLine("CustomerID: " + row["CustomerID"]); У объекта DataRow есть свойство Item, возвращающее содержимое конкретного поля. Можно указать имя поля как в примере кода, или целое число, соответствующее порядковому номеру столбца. При поиске по индексу данные немного возвращаются быстрее, чем при поиске по названию столбца. Изменение содержимого DataTable Для добавления новой строки в таблицу существует метод NewRow(), который создает новый объект DataRow, но не добавляет запись в таблицу. Полем новой записи задаются значения по умолчанию или Null, если значение по умолчанию не задано. DataRow row = ds.Tables["Customers"].NewRow(); row["CustomerID"] = "VASYA"; row["Company"] = "Компания"; row["ContactName"] = "Вася Пупкин"; row["Phone"] = "11-22-33"; ds.Tables["Customers"].Rows.Add(row); Есть еще один способ добавления записей в таблицу - метод LoadDataRow(). Первый параметр этого метода - это массив значений, элементы которого соответствуют столбцам таблицы. Второй - позволяет управлять значением свойство RowState новой записи. Если передать false, то значение этого свойства будет Added, как и при добавлении новой записи методом Add. object[]aValues = {"VASYA", "Компания", "Вася Пупкин", "11-22-33"}; ds.Tables["Customers"].LoadDataRow(aValues, false); Редактирование существующей записи можно следующим образом: DataRow row = ds.Tables["Customers"][0]; row["ContactName"] = "Вася Пупкин"; или с помощью метода ItemArray: object[] items = {"VASYA", "Компания", "Вася Пупкин", "11-22-33"}; DataRow row = ds.Tables["Customers"][0]; Row.ItemArray = items; Для удаления записи нужно вызывать метод DataRow.Delete(). При этом удаленная запись фактически не удаляется из DataTable, а помечается как удаленная - ее свойство RowState принимает значение Deleted. Если же до вызова метода Delete значение RowState было Added, тотолько в этом случае строка удаляется из таблицы. Использование столбцов с автоинкрементном Для поддержки столбцов с автоматическим увеличением значения у DataColumn есть свойства AutoIncrement, AutoIncrementSeed и AutoIncrementStep . Для того, чтобы создать столбец DataColumn с автоинкрементом нужно установить свойство AutoIncrement в true. Значение счетчика будет начинаться с AutoIncrementSeed (если это не нарушает корректность данных в таблице) и увеличиваться на значение AutoIncrementStep. Для столбцов с автоинкрементном рекомендуется устанавливать свойство ReadOnly в true. Ниже приведен пример вставки в таблицу столбца с автоинкрементом DataColumn column = table.Columns.Add("CustomerID", typeof(Int32)); column.AutoIncrement = true; column.AutoIncrementSeed = 1; column.AutoIncrementStep = 1; Если вы планируете сносить изменения в БД методом DataAdapter.Update(), то рекомендуется задать свойствам AutoIncrementSeed и AutoIncrementStep значения -1. Это гарантирует, что ADO.NET будет генерировать значения метки, которых нет в БД. При вызове метода Update в БД внесутся уже уникальные значения. |