Технология 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):

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

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

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

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

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

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

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


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

увеличить изображение
Рис. 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):

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

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

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

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

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

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



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

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

Свойство TableMappings. Окно 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).


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