Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 589
Эндрю Троелсен
В нашем примере мы установим свойство PrimaryKey типа DataTable равным объекту carIDColumn типа DataColumn.
static void Main(string[] args) {
…
// Установка первичного ключа для таблицы.
inventoryTable.PrimaryKey = new DataColumn[] { inventoryTable.Columns[0] };
}
На этом создание примера для DataTable завершается. Заключительным шагом будет вставка DataTable в DataSet-объект carsInventoryDS. Затем объект DataSet нужно оформлять вспомогательному методу PrintDataSet() (который ещё предстоит написать).
static void Main(string[] args) {
…
// Наконец, добавление таблицы в DataSet.
carsInventoryDS.Tables.Add(inventoryTable);
// Теперь вывод данных DataSet.
PrintDataSet(carsInventoryDS);
}
Метод PrintDataSet() просто выполняет цикл по всем DataTable из DataSet. печатая имена столбцов и значения строк с помощью индексатора типа.
static void PrintDataSet(DataSet ds) {
Console.WriteLine("Таблицы в DataSet '{0}'.\n", ds.DataSetName);
foreach (DataTable dt in ds.Tables) {
Console.WriteLine("Таблица {0}.\n", dt.TableName);
// Вывод имен столбцов.
for (int curCol = 0; curCol ‹ dt.Coumns.Count; curCol++) {
Console.Write(dt.Columns[curCol].ColumnName.Trim() + ''\t");
}
Console.WriteLine("\n--------------------------------");
// Вывод DataTable.
for (int curRow = 0; curRow ‹ dt.Rows.Count; curRow++) {
for (int curCol = 0; curCol ‹ dt.Columns.Count; curCol++) {
Console.Write(dt.Rows[curRow][curCol.ToString() + "\t");
}
Console.WriteLine();
}
}
}
Вывод программы показан на рис. 22.12.
Рис. 22.12. Содержимое объекта DataSet примера
Работа с DataTableReader в .NET 2.0
Тип DataTable предлагает еще целый ряд методов, кроме тех, что уже были нами рассмотрены. Подобно DataSet, тип DataTable поддерживает, например, методы AcceptChanges(), GetChanges(), Сору() и ReadXml()/WriteXml(). В .NET 2.0 тип DataTable поддерживают также метод CreateDataReader(). Этот метод позволяет получить данные DataTable, используя схему, соответствующую схеме навигации объекта чтения данных (только вперед и только для чтения). Для примера создайте новую вспомогательную функцию PrintTable(), реализованную следующим образом.
private static void PrintTable(DataTable dt) {
Console.WriteLine("\n***** Строки в DataTable *****");
// Получение нового для .NET 2.0 типа DataTableReader.
DataTableReader dtReader = dt.CreateDataReader();
// DataTableReader работает подобно DataReader.
while (dtReader.Read()) {
for (int i = 0; i ‹ dtReader.FleldCount; i++) {
Console.Write("{0} = {1} ", dtReader.GetName(i), dtReader.GetValue(i).ToString().Trim());
}
Console.WriteLine();
}
dtReader.Close();
}
Обратите внимание на то, что DataTableReader работает аналогично объекту чтения данных поставщика данных. Использование DataTableReader может оказаться идеальным вариантом, когда нужно быстро прочитать данные DataTable без просмотра внутренних коллекций строк и столбцов. Для вызова метода нужно просто указать соответствующую таблицу.