Чтение онлайн

на главную - закладки

Жанры

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

Замечание. Метод Fill возвращает целое число, соответствующее числу строк, затронутых SQL-запросом.

Как и следует ожидать, при передаче DataSet методу PrintDataSet (реализованному в этой главе ранее) будет получен список всех строк таблицы Inventory базы данных Cars (рис. 22.18).

Отображение имен базы данных в понятные имена

Вы, скорее всего, знаете, что администраторы баз данных склонны создавать имена, таблиц и столбцов, которые нельзя назвать понятными для конечных пользователей. Но хорошей вестью является то, что объекты адаптера данных поддерживают внутреннюю строго

типизованную коллекцию (DatаTableМаррing-Collection) типов System.Data.Common.DataTableMapping, доступную с помощью свойства TableMappings.

Рис. 22.18. Заполнение DataSet с помощью объекта адаптера данных

При желании вы можете использовать эту коллекцию для того, чтобы информировать DataTable о "дисплейных именах", которые должны использоваться при выводе содержимого. Предположим, например, что вы хотите отобразить имя Inventory, используемое для таблицы в рамках СУБД, в дисплейное имя Ассортимент. Кроме того, предположим, что вы хотите отобразить имя столбца CarID в виде Номер, а имя столбца PetName – в виде Название. Для этого в объект адаптера данных перед вызовом метода Fill добавьте следующий программный код (и не забудьте указать using для пространства имен System.Data.Common).

static void Main(string[] args) {

 …

 // Отображение имен столбцов БД в имена, понятные пользователю.

 DataTableMapping custMap = dAdapt.TableMappings.Add("Inventory", "Ассортимент");

 custMap.ColumnMappings.Add("CarID", "Номер");

 custMap.ColumnMappings.Add("PetName", "Название");

 dAdapt.Fill(myDS, "Inventory");

 …

}

Теперь, выполнив программу, вы обнаружите, что метод PrintDataSet отображает "понятные" имена объектов DataTable и DataRow, а не имена, заданные структурой базы данных.

Исходный код. Проект FillDataSetWithSqIDataAdapter размещен в подкаталоге, соответствующем главе 22.

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

Адаптеры данных могут не только заполнять для вас таблицы объекта DataSet. Они могут также поддерживать набор объектов основных SQL-команд, используя их для возвращения модифицированных данных обратно в хранилище данных. При вызове метода Update адаптера данных проверяется свойство RowState для каждой строки в DataTable и используются соответствующие SQL-команды, присвоенные свойствам DeleteCommand, InsertCommand и UpdateCommand, чтобы записать изменения данного DataTable в источник данных.

Чтобы проиллюстрировать процесс использования адаптера данных для возвращения изменении DataTable в хранилище данных, в следующем примере мы переработаем приложение CarsInventoryUpdater, созданное в этой главе ранее, чтобы на этот раз использовать DataSet и объект адаптера данных. Поскольку значительная часть приложения останется той же, сконцентрируем свое внимание на изменениях, которые необходимо сделать в методах DeleteCar. UpdateCarPetName и InsertNewCar (чтобы уточнить детали, проверьте текст загружаемого программного кода для данного примера).

Первым основным изменением, которое требуется внести в приложение, является

определение двух новых статических членов-переменных класса Program для представления DataSet и объекта соединения. Также, чтобы заполнить DataSet начальными данными, модифицируется метод Main.

class Program {

 // Объект DataSet, доступный на уровне приложения.

 public static DataSet dsСarInventory = new DataSet("CarsDatabase");

 // Объект соединения, доступный на уровне приложения.

 public static SqlConnection cnObj = new SqlConnection("uid-sa;pwd=;Initial Catalog=Cars;Data Source= (local)");

 static void Main(string[] args) {

// Создание адаптера данных и заполнение DataSet.

SqlDataAdapter dAdapter = new SqlDataAdapter("Select * From Inventory", chObj);

dAdapter.Fill(dsCarInventory, "Inventory");

ShowInstructions;

 // Программный код получения команды пользователя…

 }

 …

}

Обратите внимание и на то, что методы ListInventory, DeleteCar, UpdateCarPetName и InsertNewCar также были изменены с тем, чтобы они могли принять SqlDataAdapter в качестве параметра.

Установка свойства InsertCommand

При использовании адаптера данных для обновления DataSet первой задачей оказывается назначение свойствам UpdateCommand, DeleteCommand и InsertCommand действительных объектов команд (пока вы этого не сделаете, эти свойства возвращают null). Слово "действительные" для объектов команд здесь используется потому, что набор объектов команд, которые вы "подключаете" к адаптеру данных, изменяется в зависимости от таблицы, данные которой вы пытаетесь обновить. В этом примере соответствующей таблицей является таблица Inventory. И вот как выглядит измененный метод InsertNewCar.

private static void InsertNewCar(SqlDataAdapter dAdapter) {

 // Сбор информации о новой машине.

 …

 // Формирование SQL-оператора Insert и подключение к DataAdapter.

 string sql = string.Format("Insert Into Inventory" +

"(CarID, Make, Color, PetName) Values" +

"('{0}', '{1}', '{2}', '{3}')",

newCarID, newCarMake, newCarColor, newCarPetName);

 dAdapter.InsertCommand = new SqlCommand(sql);

 dAdapter.InsertCommand.Connection = cnObj;

 // Обновление таблицы Inventory с учетом новой строки.

 DataRow newCar = dsCarInventory.Tables["Inventory"].NewRow;

 newCar["CarID"] = newCarID;

 newCar["Make"] = newCarMake;

 newCar["Color"] = newCarColor;

 newCar["PetName"] = newCarPetName;

Поделиться:
Популярные книги

Часовая башня

Щерба Наталья Васильевна
3. Часодеи
Фантастика:
фэнтези
9.43
рейтинг книги
Часовая башня

Попаданка в Измену или замуж за дракона

Жарова Анита
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Попаданка в Измену или замуж за дракона

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Жена на пробу, или Хозяйка проклятого замка

Васина Илана
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Жена на пробу, или Хозяйка проклятого замка

Ваше Сиятельство

Моури Эрли
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ваше Сиятельство

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Надуй щеки!

Вишневский Сергей Викторович
1. Чеболь за партой
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Надуй щеки!

Случайная свадьба (+ Бонус)

Тоцка Тала
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Случайная свадьба (+ Бонус)

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Наследник 2

Шимохин Дмитрий
2. Старицкий
Фантастика:
попаданцы
альтернативная история
фэнтези
5.75
рейтинг книги
Наследник 2

Неучтенный. Дилогия

Муравьёв Константин Николаевич
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Неучтенный. Дилогия

Светлая тьма. Советник

Шмаков Алексей Семенович
6. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Светлая тьма. Советник