Копировать столбцы между таблицами в памяти - PullRequest
1 голос
/ 31 марта 2020

Я обрабатываю данные из файла .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 ;
    }

Спасибо за вашу помощь!

...