Я обрабатываю данные из файла .csv
.
При обработке создается таблица в памяти из элементов, содержащихся в CSV. Затем эта таблица обрабатывается с помощью оператора SQL INSERT
для заполнения базы данных (новыми) значениями, которые она содержит.
Она работает для всех данных в базе данных.
То, что я пытаюсь сделать, это оставить возможность выбора этих столбцов импортера и того, что другие оставляют без изменений.
Для этого моя идея состоит в том, чтобы создать промежуточную таблицу, которая будет представлять собой смесь исходной таблицы из базы данных и импортированная таблица построена на элементах файла csv.
У меня есть все элементы.
A List<int>
с индексом столбцов, выбранных для импорта. Промежуточная таблица ResultDatatable
поначалу совершенно идентична моей базе данных. Импортированная таблица ImportedTable
соответствует элементам csv.
Что я не могу сделать, это заменить столбец в промежуточной таблице на столбец в импортированной таблице.
Я хотел сделать что-то вроде этого:
for (int i = 0; i < MonDataSet.Tables[0].Columns.Count; i++) // Colonnes de la table de la BD
{
if (Choix_Columns.Contains(i)) // Test si l'index des colonnes existe dans la liste de sélection
{
for (int j = 0; j < MonDataSet.Tables[0].Rows.Count; j++)// Lignes de la table de la BD
{
ResultDatatable.Columns[i].Rows[j] = ImportedTable.Columns[i].Rows[j]; // Je remplis la table intermédiaire des valeurs de la table importée
}
}
}
Но я не могу написать этот код. Уже потому, что у меня нет доступа к Rows[index]
и, более того, ResultDatatable.Columns [i]
(но не ImportedTable.Columns [i]
) генерирует ошибку
Ошибка CS0200 Невозможно назначить свойство или индексатор DataColumnCollection.this [int ] '- только для чтения
Как копировать столбцы между двумя таблицами в памяти?
Полный код функции:
private DataTable Selection_Donnees(DataTable ImportedTable)
{
List<int> Choix_Columns = new List<int>(); // test de liste
Choix_Columns.Add(2);
Choix_Columns.Add(4);
// Initilization
DataTable ResultDatatable = new DataTable();
connexion = CreateConnection();
CreateTable(connexion);
Init_Dataset_Items(); // construction de MonDataset
ResultDatatable = MonDataSet.Tables[0];
for (int i = 0; i < MonDataSet.Tables[0].Columns.Count; i++)
{
if (Choix_Columns.Contains(i))
{
Console.WriteLine(i);
Console.WriteLine(ResultDatatable.Columns[i]);
for (int j = 0; j < MonDataSet.Tables[0].Rows.Count; j++)
{
// Setting.
ResultDatatable.Columns[i]...... I do not know how to do = ImportedTable.Columns[i]..........?? ;
}
}
}
return ResultDatatable ;
}
Спасибо за вашу помощь!