TableMappings
Свойство предоставляет коллекцию столбцов таблицы из источника данных, используемую для сопоставления со столбцами соответствующего объекта DataTable
.
При согласовании изменений объект DataAdapter
применяет коллекцию DataTableMappingCollection для связи имен столбцов, использованных источником данных, с именами столбцов, использованных DataTable
.
При изменении набора данных DataSet
метод Fill
должен первым делом определить, существует ли объект DataTable
, в который надо будет размещать выборку данных, формируемую SelectCommand. Он делает это путем просмотра одновременно имен существующих таблиц и любой отображаемой объектом DbDataAdapter
таблицы и столбца. По умолчанию, если таблица не существует в DataSet
или нет таблицы с именем «Table», то создается новая таблица с именем «Table» и её столбцы создаются с использованием имен и типов данных из источника данных. Как альтернатива, имя этой таблицы может быть передано во втором аргументе метода Fill
и она будет использована для размещения в ней результатов выборки данных. Если результатом команды является несколько выборок данных, то дополнительные таблицы именуются как «Table1» «Table2» и т.д.
Если метод Fill
выявляет дубликаты имен столбцов, то они будут именоваться как «имя столбца»1, «имя столбца»2 и т.д. Не именованные столбцы (такие, как результат агрегатных функций) будут иметь имена «столбец1», «столбец2».
Если клиентское приложение не устраивает такое именование, то оно всегда может использовать явные имена для столбцов.
Когда используется режим перезаписи и передается объект DataTable
, то метод Fill
сначала просматривает отображение таблицы, и если она не найдена, просто добавляет таблицу независимо от её имени. Свойства MissingSchemaAction и MissingMappingAction оказывают влияние на этот процесс. Конечным результатом является то, что данные могут быть добавлены в DataSet
или DataTable
без отображения любой таблицы или столбца, независимо от того, какие таблицы или столбцы уже существуют.
Декларация
public DataTableMappingCollection TableMappings {get;};
Значение свойства
Коллекция, обеспечивающая основное сопоставление между возвращенными записями и записями в объекте DataSet
.
По умолчанию используется пустая коллекция.
Исключения
Отсутствуют.
Пример
// C# using System; using System.Data; using System.Data.Common; class TableMappingsSample { static void Main() { // Создание фабрики классов провайдера DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.LinterClient"); // Соединение с БД DbConnection con = factory.CreateConnection(); con.ConnectionString = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8"; // Создание таблицы БД DbCommand cmd = factory.CreateCommand(); cmd.Connection = con; cmd.CommandText = "create or replace table users ( " + "id integer primary key, name varchar(70));" + "insert into users (id, name) values (0, 'Пользователь A');" + "insert into users (id, name) values (1, 'Пользователь B');"; con.Open(); cmd.ExecuteNonQuery(); con.Close(); // Создание объекта DataSet DataSet ds = new DataSet(); DataTable users = ds.Tables.Add("Пользователи"); users.Columns.Add("Номер", typeof(int)); users.Columns.Add("Имя пользователя", typeof(string)); // Отображение столбцов таблицы DataTable на поля БД DataTableMapping mapping = new DataTableMapping("Table", "Пользователи"); mapping.ColumnMappings.Add("ID", "Номер"); mapping.ColumnMappings.Add("NAME", "Имя пользователя"); // Создание объекта DbDataAdapter DbDataAdapter adapter = factory.CreateDataAdapter(); adapter.SelectCommand = factory.CreateCommand(); adapter.SelectCommand.Connection = con; adapter.SelectCommand.CommandText = "select id, name from users"; adapter.TableMappings.Add(mapping); // Заполнение объекта DataSet данными из таблицы БД adapter.Fill(ds); // Отображение столбцов таблицы Console.WriteLine("Столбцы таблицы:"); foreach (DataColumn column in users.Columns) { Console.Write("{0} | ", column.ColumnName); } Console.WriteLine(); // Отображение строк таблицы Console.WriteLine("Строки таблицы:"); foreach (DataRow row in users.Rows) { foreach (DataColumn column in users.Columns) { Console.Write("{0} | ", row[column.ColumnName]); } Console.WriteLine(); } } } Результат выполнения примера: Столбцы таблицы: Номер | Имя пользователя | Строки таблицы: 0 | Пользователь A | 1 | Пользователь B |