Технология Microsoft ADO.NET

       

Свойство TableMappings. Окно QuickWatch


При создании базы данных в ней определяются названия столбцов. При выводе таблицы в элемент DataSet часто бывает нужно изменить эти названия. Самый простой способ это сделать - использовать SQL-запрос, содержащий псевдонимы. Скопируйте папку приложения FillMethod и переименуйте ее в "Psevdonim". Изменим строку commandText следующим образом3):

string commandText = "SELECT CustomerID AS Номер_клиента, CompanyName AS Компания, ContactName AS Имя, ContactTitle AS Должность, Address AS Адрес, City AS Город, Region AS Регион," + "PostalCode AS Индекс, Country AS Страна, Phone AS Телефон, Fax AS Факс FROM Customers";

Оператор AS представляет названия поля, например, CustomerID в виде псевдонима "Номер_клиента", который будет заголовком столбца в объекте DataSet. Изменим фрагмент кода в конструкторе формы:

dataAdapter.Fill(ds); dataGrid1.DataSource = ds.Tables[0].DefaultView;

Запустив приложение, мы обнаруживаем, что заголовки столбцов появились с новыми названиями (рис. 12.3):


Рис. 12.3.  Применение псевдонимов

Подобный SQL-запрос действительно удобно применять при выводе информации только для чтения. Если же требуется определить структуру объекта DataSet не только для вывода, но и для изменений данных, использование псевдонимов может оказаться достаточно сложным. Надежный способ решить эту же задачу - задействовать свойство TableMappings объекта DataAdapter. Рассмотрим вначале визуальные средства студии для настройки свойства. Создайте новое приложение и назовите его VisualTableMappings. Из окна Server Explorer перетаскиваем на форму таблицу Customers базы данных MS SQL "NorthwindCS4)" (рис. 12.4):


Рис. 12.4.  Перемещение таблицы "Customers" на форму

Выбираем появившейся элемент sqlDataAdapter1, переходим в окно Properties, в поле свойства TableMappings нажимаем на кнопку

(...) (рис. 12.5, А). В появившемся окне Table Mappings называем таблицу в DataSet "Клиенты", а затем переименовываем поля следующим образом (рис. 12.5, Б):


Source ColumnsDataset Columns
СustomerIDНомер_клиента
CompanyNameКомпания
ContactNameИмя
ContactTitleДолжность
AddressАдрес
CityГород
RegionРегион
PostalCodeИндекс
CountryСтрана
PhoneТелефон
FaxФакс

увеличить изображение
Рис. 12.5.  Свойство TableMappings. А - переход к настройке, Б - задание заголовков столбцов

Завершив настройку, нажимаем кнопку OK. Выделяем объект sqlDataAdapter1, в окне Properties щелкаем на ссылку "Generate DataSet". В появившемся окне вводим название "dsCustomers". Перетаскиваем на форму элемент DataGrid и его свойству Dock устанавливаем значение "Fill". В свойстве DataSource выбираем из выпадающего списка значение "dsCustomers1.Клиенты" - в результате на элементе появляются заголовки столбцов. Переходим в код формы, подключаем пространство имен для работы с базой данных:

using System.Data.SqlClient;

В конструкторе формы заполняем объект DataSet данными:

public Form1() { InitializeComponent(); sqlDataAdapter1.Fill(dsCustomers1); }

Запущенное приложение будет выглядеть так же, как и в случае применения псевдонимов (см. рис. 12.3).

Посмотрим, какие поля будут находиться в DataSet во время выполнения программы, после того как мы применили свойство TableMappings. Поставим точку остановки в строке заполнения данными (рис. 12.6):


Рис. 12.6.  Точка остановки. Для ее установки или удаления дважды щелкаем на поле

Запускаем приложение. Программа прервет свое выполнение на точке остановки. Установив курсор на объект dsCustomers1, вызываем контекстное меню, в котором выбираем пункт "QuickWatch_" (рис. 12.7):


увеличить изображение
Рис. 12.7.  Вызов окна "QuickWatch:" во время выполнения программы

Диалоговое окно QuickWatch предназначено для быстрого расчета значения переменной (рис. 12.8). В столбцах Name, Value и Type этого окна отображаются сведения только об одной переменной, из него переменную можно добавить в окно Watch, а затем изменить ее значение, введя новое значение в столбец Value (рис. 12.9).




увеличить изображение
Рис. 12.8.  Окно QuickWatch. Добавление столбца "Адрес"


Рис. 12.9.  Окно Watch. Изменение названия в поле "Value"

Оставим, однако, названия полей, определенные в окне Table Mappings.

В программном обеспечении к курсу вы найдете приложения Psevdonim и VisualTableMappings (Code\Glava6).

Перейдем к программному определению свойства TableMappings. Создайте новое приложение и назовите его ProgrammTableMappings. Перетаскиваем на форму элемент DataGrid, его свойству Dock устанавливаем значение Fill. В классе формы определяем строки commandText и connectionString:

string commandText = "SELECT CustomerID, CompanyName, ContactName, ContactTitle, Address, City, Region," + " PostalCode, Country, Phone, Fax FROM Customers"; string connectionString = "workstation id=7EA2B2F6068D473;integrated security=SSPI;data sou" + "rce=\"(local)\";persist security info=False;initial catalog=NorthwindCS";



Подключаем пространства имен для работы c базой данных и классом DataTableMapping:

using System.Data.SqlClient; using System.Data.Common;

В конструкторе формы создаем объекты SqlConnection, SqlCommand и SqlDataAdapter:

SqlConnection conn = new SqlConnection(); conn.ConnectionString = connectionString; SqlCommand myCommand = new SqlCommand(); myCommand.Connection = conn; myCommand.CommandText = commandText; SqlDataAdapter dataAdapter = new SqlDataAdapter(); dataAdapter.SelectCommand = myCommand;

Создаем экземпляр dtMapping класса DataTableMapping, устанавливаем соответствие между таблицами "Table" базы данных и "DataSetTable Customers" объекта DataSet:

DataTableMapping dtMapping = new DataTableMapping("Table", "DataSetTableCustomers");

Почему таблица Customers, которую мы извлекаем, здесь называется "Table"? Дело в том, что у объекта DataAdapter нет возможности определить, как называется таблица в базе, и он подставляет предположительное название "Table".


Второй параметр, DataSetTableCustomers, - это произвольно задаваемое название таблице в DataSet.

Создаем экземпляр dcMappings класса DataColumnMapping, в котором определяем названия полей в DataSet:

DataColumnMapping[] dcMappings = { new DataColumnMapping("CustomerID", "Номер_клиента"), new DataColumnMapping("CompanyName", "Компания"), new DataColumnMapping("ContactName", "Имя"), new DataColumnMapping("ContactTitle", "Должность"), new DataColumnMapping("Address", "Адрес"), new DataColumnMapping("City", "Город"), new DataColumnMapping("Region", "Регион"), new DataColumnMapping("PostalCode", "Индекс"), new DataColumnMapping("Country", "Страна"), new DataColumnMapping("Phone", "Телефон"), new DataColumnMapping("Fax", "Факс"), };

Добавляем созданный экземпляр dcMappings в коллекцию ColumnMappings объекта dtMapping:

dtMapping.ColumnMappings.AddRange(dcMappings);

Готовый объект dtMapping передаем в DataAdapter, используя его свойство TableMappings:

dataAdapter.TableMappings.Add(dtMapping);

Создаем и заполняем объект DataSet данными:

DataSet dsCustomers = new DataSet(); dataAdapter.Fill(dsCustomers); dataGrid1.DataSource = dsCustomers.Tables["DataSetTableCustomers"].DefaultView;

Запускаем приложение. Его вид будет в точности такой же, как и в случае применения псевдонимов (см. рис. 12.3).

В программном обеспечении к курсу вы найдете приложение Programm TableMappings (Code\Glava6 ProgrammTableMappings).


Содержание раздела