
- •Системы оперативной обработки транзакций
- •Традиционные экспертные системы
- •Информационные хранилища
- •Многомерные базы данных
- •Системы оперативной аналитической обработки данных
- •Трактовка терминов: “Информационно-поисковая система”, “Информационно-справочная система”, ”База знаний”. Понятие поискового образа объекта ипс и связь его с базой данных.
- •Архитектуры приложений баз данных. Локальное приложение. Информационная система с архитектурой “файл - сервер”. Информационная система с архитектурой “клиент-сервер”.
- •Понятие о сервере баз данных. Общие сведения о sql-серверах на примере ms sql Server 2008. Понятие об администрировании сервером. Основные сведения об утилитах администрирования sql-сервером.
- •Архитектура ado.Net.
- •Общие сведения о подключении к данным в Visual Studio.
- •Строки подключения
- •Установка соединения посредством кода в ado.Net
- •Подключения на этапе разработки в обозревателе серверов/обозревателе баз данных
- •Уровни объектной модели ado.Net
- •Хранение данных в наборах данных. Создание набора данных
- •Взаимодействие с базой данных через объект DataSet
- •Общие сведения об адаптере таблиц
- •Общие сведения об объекте DataTableReader
- •Мастер настройки источников данных
- •Конструктор наборов данных
- •Связанные таблицы и объекты DataRelation
- •Заполнение набора данных
- •Редактирование данных в приложении
- •Общие сведения о сохранении данных
- •Представление объекта DataTable
- •Технология linq.
- •Введение в запросы linq.
- •Linq to sql. Создание проекта linq.
- •Linq to sql. Три части операции запроса.
- •Linq to sql. Синтаксис запроса и метода.
- •Linq to DataSet. Общие сведения о linq to DataSet.
- •Linq to DataSet. Запросы к одиночным таблицам.
- •Linq to DataSet. Универсальные методы Field и SetField.
- •Понятие метаданных и способы их представления в структурах данных. Основные сведения о представлении знаний. Сравнительное определение терминов “Знание” и “Информация”.
- •Нелинейные структуры данных. Общие понятия о деревьях.
- •Представление сетевых структур.
- •Методы реализации древовидных и сетевых структур в реляционных субд.
- •Дескрипторная компонента проектной среды поддержки принятия решений в сапр. Реализация дескрипторной компоненты средствами реляционных субд.
- •– 41. Классификационная компонента проектной среды принятия решений в сапр. Обоснование необходимости присутствия классификационной компоненты в информационных системах сапр.
- •Продукционная компонента проектной среды принятия решений в сапр.
- •Компонента структурных объектов проектной среды принятия решений в сапр. Общее понятие о методах реализации структурной компоненты в информационных системах сапр.
- •Представление инженерных знаний в форме информационно-логических таблиц (илт).
- •Справочные таблицы без условий. Реляционное представление справочных таблиц без условий.
- •Справочные таблицы с условиями. Реляционное представление справочных таблиц с условиями.
Общие сведения об объекте DataTableReader
DataTableReader представляет содержимое объекта DataTable или DataSet в виде одного или нескольких результирующих наборов, предназначенных только для чтения и только для перенаправления.
Объект DataTableReader может содержать несколько результирующих наборов, если он был создан путем вызова CreateDataReader. Результаты будут представлены в таком же порядке, как и объекты DataTable в коллекции Tables объекта DataSet.
Объект DataTableReader в основном действует как любой другой объект чтения данных, например SqlDataReader, за тем исключением, что объект DataTableReader обеспечивает итерацию строк в объекте DataTable. Другими словами, он обеспечивает итерацию строк в кэше. Кэшированные данные могут быть изменены, пока объект DataTableReader активен, при это объект чтения автоматически удерживает свою позицию.
При создании объекта DataTableReader на базе объекта DataTable, итоговый объект DataTableReader будет содержать один результирующий набор с данными, содержащимися в объекте DataTable, на основе которого он был создан, за исключением строк, помеченных, как удаленные. Столбцы отображаются в том же порядке, что и в исходном объекте DataTable. Схема и данные структуры результирующего набора соответствуют схеме и данным исходного объекта DataTable. Объект DataTableReader, который был создан при помощи вызова метода CreateDataReader объекта DataSet, содержит несколько результирующих наборов, если объект DataSet имеет более одной таблицы. Результаты располагаются в той же последовательности, что и объекты DataTable в коллекции DataTableCollection объекта DataSet.
Возвращаемый результирующий набор содержит только текущую версию каждого из объектов DataRow; строки, помеченные для удаления, пропускаются.
Объект DataTableReader предоставляет стабильный итератор; то есть содержимое объекта DataTableReader при изменении размера базовой коллекции во время итерации не обновляется. Например, если в ходе итерации в коллекции Rows удаляется одна или несколько строк, текущая позиция в объекте DataTableReader соответствующим образом изменяется и это не ведет к обновлению итератора.
При решении вопроса о том, должно ли приложение использовать DataReader или DataSet, следует рассмотреть тип функциональности, который необходим для приложения. DataSet предназначен для выполнения следующих задач:
локальное кэширование данных в приложении для последующей обработки. Если нужно только считывать результаты запроса, класс DataReader подходит наилучшим образом;
удаленное взаимодействие с данными между уровнями или от веб-службы XML;
динамическое взаимодействие с данными, например привязка к элементу управления Windows Forms или комбинирование и связывание данных из нескольких источников;
выполнение интенсивной обработки, не требующей открытого соединения с источником данных, что освобождает соединение для использования другими клиентами.
Если функциональность, предоставляемая классом DataSet, не нужна, можно повысить производительность приложения, используя класс DataReader для возврата данных в однопроходном режиме только для чтения. Хотя класс DataAdapter использует класс DataReader для заполнения содержимого, путем применения класса DataReader можно повысить производительность, т.к. будет экономиться память, которую потреблял бы объект DataSet, и избежать обработки, необходимой для создания и заполнения содержимого DataSet.
Классы DataTable и DataSet имеют метод CreateDataReader, возвращающий содержимое объекта DataTable или содержимое объекта DataSet коллекции Tables в виде одного или нескольких доступных для чтения результирующих наборов с последовательным доступом.
Пример
Следующее приложение командной строки создает экземпляр DataTable. Затем в этом примере передается заполненный объект DataTable в процедуру, вызывающую метод CreateDataReader, который выполняет итерацию по результатам, содержащимся в объекте DataTableReader.
private static void TestCreateDataReader(DataTable dt)
{
using (DataTableReader reader = dt.CreateDataReader())
{
do
{
if (!reader.HasRows)
{
Console.WriteLine("Empty DataTableReader");
}
else
{
PrintColumns(reader);
}
Console.WriteLine("========================");
} while (reader.NextResult());
}
}
private static DataTable GetCustomers()
{
DataTable table = new DataTable();
DataColumn idColumn = table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
.
table.PrimaryKey = new DataColumn[] { idColumn };
table.Rows.Add(new object[] { 1, "Mary" });
table.Rows.Add(new object[] { 2, "Andy" });
table.Rows.Add(new object[] { 3, "Peter" });
table.Rows.Add(new object[] { 4, "Russ" });
return table;
}
private static void PrintColumns(DataTableReader reader)
{
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
Console.Write(reader[i] + " ");
}
Console.WriteLine();
}
}
В этом примере отображаются следующие выходные данные в окне консоли:
1 Mary
2 Andy
3 Peter
4 Russ