Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




Использование сопоставления (TableMapping) | C#

Одним из интересных и полезных свойств класса DataAdapter, который служит для обмена данными между DataSet и источником данных, является TableMappings. TableMappings позволяет задать соответствие имен таблиц и столбцов в БД и источнике данных.

То есть, если по простому, в базе данных у нас есть поле ID, но с помощью механизма сопоставления в источнике данных мы можем получить не поле ID, а поле Идентификатор. Аналогично и с именованием таблиц.

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

Пример:

// настраиваем DataAdapter
da = new SqlCeDataAdapter();
da.SelectCommand = Constants.connection.CreateCommand();
da.SelectCommand.CommandText = "select * from DataTable where id=@id ";

da.InsertCommand = Constants.connection.CreateCommand();
da.InsertCommand.CommandText = "insert into DataTable (id, user, Dates) values (@id, @user, @Date)";

da.UpdateCommand = Constants.connection.CreateCommand();
da.UpdateCommand.CommandText = "update DataTable set user=@user, Date=@Date where id=@id";

da.DeleteCommand = Constants.connection.CreateCommand();
da.DeleteCommand.CommandText = "delete from Readings where id=@id";

ds = new DataSet();
// описываем сопоставление 
DataColumnMapping[] dcm = {
new DataColumnMapping("user", Langs.Resource.user_text), // имя в БД – имя в источнике
new DataColumnMapping("Date", Langs.Resource.date_text) // имя в БД – имя в источнике
};
// Langs.Resource.user_text – берется из ресурсов проекта, соответствующей локали приложения. 

DataTableMapping dtm = new DataTableMapping("DataTable", "Таблица", dcm);
da.TableMappings.Clear();
da.TableMappings.Add(dtm);
da.Fill(ds, "Таблица");
dataGridView.DataSource = ds;
dataGridView.DataMember = "Таблица";

dr.BeginEdit();
dr["id"] = “116”; // имя столбца не изменялось
dr[Langs.Resource.user_text] =” Имя пользователя”; // используется сопоставленное имя столбца
dr[Langs.Resource.date_text] =DateTime.Now;
dr.EndEdit();

da.Update(ds, "Таблица"); Применяем изменения в DataSet. Изменения в БД не заносятся! Используется сопоставленное имя таблицы.
ds.AcceptChanges(); // заносим изменения в базу данных