Лекция: Взаимодействие базы данных с ADO.NET. Объект OleDbDataAdapter. Заполнение DataSet. Обновление источников данных

ADO.NET — это часть Microsoft .NET Framework, т.е. набор средств и слоев, позволяющих приложению легко управлять и взаимодействовать со своим файловым или серверным хранилищем данных.

В NET Framework библиотеки ADO.NET находится в пространстве имени System.Data. Эти библиотеки обеспечивают подключение к источникам данных, выполнении команд, а также хранилище, обработку и выборку данных.

ADO.NET отличается от предыдущих технологий доступа к данным тем, что она позволяет взаимодействовать с базой данных автономно. Автономный доступ к данным необходим, когда невозможно удерживать открытое физическое подключение к базе данных каждого отдельного пользователя или объекта.

Важным элементом автономного доступа к данным является контейнер для табличных данных, который не знает о СУБД. Такой незнающий о СУБД автономный контейнер для табличных данных представлен в библиотеках ADO.NET классом DataSet или DataTable:

DataSet. Класс DataSet является ядром автономного режима доступа к данным в ADO.NET. Лучше всего рассматривать, как будто в нем есть своя маленькая СУБД, полностью находящаяся в памяти.

DataTable. Больше всего этот класс похож на таблицу БД. Он состоит из объектов DataColumn, DataRow, представляющих из себя строки и столбцы.

Класс OleDbDataAdapter gредставляет набор команд данных и подключение базы данных, которые используются для заполнения DataSet и обновления источника данных.

Иерархия наследования:

System.Object

System.MarshalByRefObject

System.ComponentModel.Component

System.Data.Common.DataAdapter

System.Data.Common.DbDataAdapter

System.Data.OleDb.OleDbDataAdapter

Синтаксис:

public sealed class OleDbDataAdapter: DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable

Существует несколько способов работы с DataSet, которые могут применяться отдельно или в сочетании. Можно сделать следующее:

Программно создать DataTable, DataRelation и Constraint внутри DataSet и заполнить таблицы данными.

Заполнить DataSet таблицами данных из существующего реляционного источника данных с помощью DataAdapter.

Загрузить и сохранить содержимое DataSet с помощью XML-кода.

Заполнение DataSet из адаптера данных DataAdapter

Набор данных ADO.NET DataSet является находящимся в памяти представлением данных, предоставляющим согласованную реляционную программную модель, независимую от источника данных. Набор данных DataSet представляет собой полную совокупность данных, которая включает таблицы, ограничения и связи между таблицами. Набор данных DataSet является независимым от источника данных, поэтому DataSet может включать данные, локальные по отношению к приложению, а также данные из нескольких источников данных. Управление взаимодействием с существующими источниками данных осуществляется с помощью DataAdapter.

Свойство SelectCommand объекта DataAdapter представляет собой объект Command, получающий данные из источника данных. Свойства InsertCommand, UpdateCommand и DeleteCommand, принадлежащие DataAdapter, являются объектами Command, которые управляют обновлением данных в источнике данных в соответствии с изменениями данных в DataSet.

Метод Fill объекта DataAdapter служит для заполнения набора данных DataSet результатами выполнения метода SelectCommand объекта DataAdapter. Метод Fill принимает в качестве аргумента подлежащий заполнению набор данных DataSet, а также объект DataTable или имя объекта DataTable, который должен быть заполнен строками, возвращенными методом SelectCommand.

Пример:

// Assumes that connection is a valid SqlConnection object.

string queryString = «SELECT CustomerID, CompanyName FROM dbo.Customers»;

SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);

DataSet customers = new DataSet();

adapter.Fill(customers, «Customers»);

Обновление источников данных с помощью объектов DataAdapter

Метод Update объекта DataAdapter вызывается для решения задачи по передаче изменений из DataSet обратно в источник данных. Метод Update, как и метод Fill, принимает в качестве аргументов экземпляр DataSet, а также (необязательно) объект DataTable или имя DataTable. Экземпляр DataSet представляет собой объект DataSet, который содержит выполненные изменения, а DataTable указывает на таблицу, из которой должны быть получены эти изменения. Если ни один объект DataTable не задан, используется первый объект DataTable в DataSet.

При вызове метода Update в DataAdapter анализируются внесенные изменения и выполняется соответствующая команда (INSERT, UPDATE или DELETE). Если в DataAdapter обнаруживается изменение в DataRow, то в этом объекте используется команда InsertCommand, UpdateCommand или DeleteCommand для обработки этого изменения. Это позволяет максимально повысить производительность приложения ADO.NET путем задания синтаксиса команды во время разработки, а также, по возможности, за счет применения хранимых процедур. Необходимо явно задавать команды перед вызовом Update. Если вызывается Update, и не существует подходящая команда для конкретного обновления (например, отсутствует DeleteCommand для удаленных строк), то активизируется исключение.

Пример:

В следующем примере показано, как выполнить обновления применительно к модифицированным строкам путем явного задания значения UpdateCommand объекта DataAdapter и вызова его метода Update. Обратите внимание на то, что задан параметр, указанный в предложении WHERE инструкции UPDATE, чтобы использовалось значение Original объекта SourceColumn. Это важно, поскольку значение Current могло быть изменено, поэтому может не соответствовать этому значению в источнике данных. Значение Original представляет собой значение, которое использовалось для заполнения DataTable из источника данных.

private static void AdapterUpdate(string connectionString)

{

using (SqlConnection connection =

new SqlConnection(connectionString))

{

SqlDataAdapter dataAdpater = new SqlDataAdapter(

«SELECT CategoryID, CategoryName FROM Categories»,

connection);

dataAdpater.UpdateCommand = new SqlCommand(

«UPDATE Categories SET CategoryName = @CategoryName » +

«WHERE CategoryID = @CategoryID», connection);

dataAdpater.UpdateCommand.Parameters.Add(

"@CategoryName", SqlDbType.NVarChar, 15, «CategoryName»);

SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(

"@CategoryID", SqlDbType.Int);

parameter.SourceColumn = «CategoryID»;

parameter.SourceVersion = DataRowVersion.Original;

DataTable categoryTable = new DataTable();

dataAdpater.Fill(categoryTable);

DataRow categoryRow = categoryTable.Rows[0];

categoryRow[«CategoryName»] = «New Beverages»;

dataAdpater.Update(categoryTable);

Console.WriteLine(«Rows after update.»);

foreach (DataRow row in categoryTable.Rows)

{

{

Console.WriteLine("{0}: {1}", row[0], row[1]);

}

}

}

}

Главная функция OleDbDataAdapter — это перемещение данных из памяти в DataSet и обратно в память, он также создает полностью новые таблицы из существующих данных или выкладывает их как XML.

Три метода используются для удаления, вставки и обновления данных в наборе. Коллекция TableMappings(Отображение таблицы) определяет, как таблицы и столбцы из источников подходят к наборам данных.

Создание объекта OleDbDataAdapter

10: 'Dim objCmd as New OleDbDataAdapter (strSQL,Conn)

13: 'or

14: 'Dim objCmd as New OleDbDataAdapter (strSQL,,strConnectionString)

Запомните: при использовании методов Update, Insert и Delete основные данные фактически не изменяются, а вместо этого изменяется отсоединенный DataSet. Изменения отражаются в источнике данных только после вызова метода OleDbDataAdapter.Update.

Заполнение DataSet

Посмотрим пример заполнения DataSet и затем исследуем различные методы Листинг Заполнение DataSet

1: dim strConnectionString as String =_

2: «Provider=Microsoft.Jet.OLEDB.4.0;» Sb_

3: «Data Source=C: \ASPNET \data \banlcing.mdb»)

4: Dim ds as DataSet =New DataSet{«MyDataSet „)

5: Dim strSQL as String =“SELECT *FROH tblUsers „

6:

7: Dim objCmd as new OleDbDataAdapter{strSQL,_

8: strConnectionString)

9:

10: objCmd.Fill(ds,“Users)

 

еще рефераты
Еще работы по информатике