ADO.NET - вставка с использованием Adapter.Update () с подмножеством столбцов из родительской таблицы. - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть такой адаптер -

var ds = new DataSet("T1");
adapter.Fill(ds, "Table1");

Теперь в таблице 1 есть 3 столбца - Col1, Col2, Col3

У меня есть Таблица 2 с Col1 и Col3. Как использовать вышеуказанный адаптер для вставки записей только для выбранных столбцов из таблицы 1 в таблицу 2? Я пробовал это, но не повезло.

// remove the column which is not required
ds.Tables["Table1"].Columns.Remove("Col2");

// clear the old table mappings
adapter.TableMappings.Clear();

// create new table mappings
DataTableMapping mapping = adapter.TableMappings.Add("Table2", ds.Tables["Table1"].ToString());
mapping.ColumnMappings.Add("Col1", ds.Tables["Table1"].Columns[0].ColumnName);
mapping.ColumnMappings.Add("Col3", ds.Tables["Table1"].Columns[2].ColumnName);

// fill the adapter with new Dataset
var newDs = ds.Copy();
adapter.Fill(newDs);
ds.Dispose();

// Insert records into new Table
recordsUpdated += adapter.Update(newDs , "Table2");

ОШИБКА - Дополнительная информация: отсутствует столбец данных Col2 в таблице данных «Таблица1» для столбца источника Col2.

1 Ответ

0 голосов
/ 15 сентября 2011

Я сделал это -

a. Инициализируйте SqlDataAdapter с новой таблицей (SELECT * FROM Table2) - назовите его

newAdapter

Убедитесь, что вы сделали - AcceptChangesDuringFill = false , потому что позже при перечислении строк установка добавленного состояния строки не будет работать в противном случае.

b.Удалите ненужный столбец из таблицы данных таблицы1

c. Обновите состояние строки этой таблицы данных до «Добавлено» следующим образом -

// 1st, commit all changes in the DataTable.
dtTable1.AcceptChanges();

// update the row state
foreach (DataRow row in dtTable1.Rows)
{
  row.SetAdded();
}

d. Наконец, «вставьте» с помощью адаптера, созданного на шаге а. как это -

var recordsInserted = newAdapter.Update(dtTable1); // insert happens
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...