| Члены | Описание |
|---|---|
| SelectCommand InsertCommand UpdateCommand DeleteCommand | Задают SQL-команды, которые будут отправлены хранилищу данных при вызове метода Fill() или Update() |
| Fill() | Заполняет данную таблицу в DataSet некоторым набором записей, зависящим от заданного объектом команды значения SelectCommand |
| Update() | Обновляет DataTable, используя объекты команд из свойств InsertCommand, UpdateCommand или DeleteCommand. Точная команда, которая при этом выполняется, зависит от значения RowState для данного DataRow в данном объекте DataTable (данного DataSet) |
В следующих примерах не забывайте о том, что объекты адаптера данных управляют соответствующим соединением с базой данных за вас, так что вам не придется явно открывать или закрывать сеанс связи с СУБД. Тем не менее, вам все равно нужно предоставить адаптеру данных действительный объект соединения или, в виде аргумента конструктора, строку соединения (которая будет использоваться для построения внутреннего объекта соединения).
Заполнение DataSet с помощью адаптера данных
Создайте новое консольное приложение с именем FillDataSetWithSqlDataAdapter, указав в нем использование пространств имен System.Data и System. Data.SqlClient. Обновите метод Main() так, как предлагается нише (для простоты здесь не показан блок try/catch).
static void Main(string[] args) {
Console.WriteLine("***** Забавы с адаптерами данных ***** \n");
string cnStr = "uid=sa;pwd=;Initial Catalog=Cars;Data Source=(local)";
// Заполнение DataSet новыми DataTable.
DataSet myDS = new DataSet("Cars");
SqlDataAdapter dAdapt
dAdapt.Fill(myDS, "Inventory");
// Отображение содержимого.
PrintDataSet(myDS);
}
Обратите внимание на то, что адаптер данных создается с указанием SQL-оператора Select. Это значение будет использоваться для внутреннего построения объекта команды, которую затем можно будет получить, выбрав свойство SelectCommand. Далее, заметьте, что метод Fill() получает экземпляр типа DataSet и необязательное строковое имя, которое будет использоваться при установке свойства TableName нового объекта DataTablе (если вы не укажете имя таблицы, адаптер данных использует для таблицы имя Table).
Замечание
. Метод 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", "Ассортимент");