Динамическое c сопоставление DataTable ColumnNames с SQL Заголовками столбцов базы данных для нескольких таблиц - PullRequest
0 голосов
/ 23 апреля 2020

Прежде всего, моя цель: мне нужно объединить данные из файла .csv с данными из нескольких таблиц базы данных SQL. Я получаю файл .csv с примерно 2000 строками строк. Эти строки содержат данные двух таблиц, один раз для таблицы клиента и один раз для информации о контракте с этим клиентом (отношение 1: n). Затем данные будут сравниваться, новые данные будут импортированы, существующие обновлены, это будет учитываться как для таблиц, так и для клиентов и контрактов.

С другой стороны, мне нужна динамика c, довольно простая Отображение: заголовок CSV "X" = столбец таблицы "Y". Важным моментом здесь является то, что он должен быть динамическим c, что по сути означает, что я мог бы в любой момент добавить дополнительные столбцы в мой файл .csv, создать запись в моем файле отображения и это все еще принесло бы эту новую запись. И наоборот, если я изменяю сопоставленный столбец или удаляю один и тот же тип поведения.

Что я сделал: я анализирую файл .csv с помощью GenericParser для данных с заголовками столбцов. Я создал INI-файл, который по сути просто отображает заголовки заголовков из таблицы данных на мой сервер sql. Затем я заменяю datatable columnNames именами заголовков столбцов из моей таблицы sql, которую я снова извлекаю из своего отображения.

Моя проблема: Каков наилучший способ убедиться, что мое отображение знает в какую sql таблицу входит этот столбец, и как это отразится на моих sql утверждениях для процесса слияния.

Я мог бы также представить, что это совершенно неправильный способ сделать это. Если это так, я открыт для предложений.

Редактировать:

Как указано в комментарии, вот мой код:

Main:

    static void Main(string[] args)
    {
        // Init Config
        _mainConfig = new Configuration.Main(@"C:\temp\kosy\mainconfig.cfg");

        // get Import Files
        String csvFileKunden = _mainConfig.csvFileKunden;
        String csvFileVerträge = _mainConfig.csvFileVerträge;

        // Parse to Datatables
        var dataTableKunden = getDataTableKosy(csvFileKunden);
        var dataTableVerträge = getDataTableKosy(csvFileVerträge);

        // Init Mapping
        var mappingConfig = new Config(_mainConfig.mappingFile);
        var sk = "mappingKunden";
        var sv = "mappingVerträge";

        // Replace ColumNames with Mapped Names
        foreach (DataColumn column in dataTableKunden.Columns) {
            dataTableKunden.Columns[column.ColumnName].ColumnName = mappingConfig.Read(column.ColumnName, sk);
        }
        foreach (DataColumn column1 in dataTableVerträge.Columns)
        {
            dataTableVerträge.Columns[column1.ColumnName].ColumnName = mappingConfig.Read(column1.ColumnName, sv);
        }
        // Replace TableNames with Mapped Names
        dataTableKunden.TableName = mappingConfig.Read("Kunden", "tablemapping");
        dataTableVerträge.TableName = mappingConfig.Read("Verträge", "tablemapping");

        Console.ReadKey();
    }

Анализ данных:

     private static DataTable getDataTableKosy(string csvFile) {
        DataTable retVal;
        using (var parser = new GenericParserAdapter(csvFile)) {
            parser.ColumnDelimiter = ';';
            parser.FirstRowHasHeader = true;
            retVal = parser.GetDataTable();
        }
        return retVal;
    }

Тестовые данные, с которыми я работаю: Ссылка на общий доступ к файлам (Dracoon)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...