Как я могу получить конкретную информацию из исключения, чтобы добавить ее в свое собственное сообщение?

Я получаю данные из файла xlx/xlxs. Я на самом деле использую библиотеку ExcelDataReader для сохранения данных в DataSet с помощью плагина ExcelDataReader.

excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
excelDataTable = excelReader.AsDataSet(conf);

Сейчас я пытаюсь преобразовать System.Data.DataSet в строго типизированный набор данных.

public DocAdmin.GHDefinitionDataTable ConvertDataTable(DataTable dtOriginal)
    {

        DocAdmin.GHDefinitionDataTable ghDefiniton = new DocAdmin.GHDefinitionDataTable();
        int ExcelRowNumber = 1;
        foreach (DataRow row in dtOriginal.Rows)
        {
            ++ExcelRowNumber;
            try
            {
                ghDefinition.ImportRow(row);
            }
            catch (ArgumentException ex)
            {
                OperationMessage message = new OperationMessage();
                this.ShowMessage(message );
            }

        }
        return ghDefinition;
    }

Я получаю это сообщение об исключении:

Неправильный формат входной строки. Не удалось сохранить в столбце SAHasta. Ожидаемый тип - Десятичный.

Это потому, что я специально устанавливаю значения NULL для ячейки.

Я хотел бы показать сообщение с указанием номера строки (номер ячейки в файле Excel), я использую ++ExcelRowNumber, чтобы показать это, но я не знаю, как получить имя столбца и тип данных из строго типизированного набор данных, который дает мне исключение. Я знаю, что исключение указывает это для себя: не удалось сохранить в столбце SAHasta, но я должен сделать пользовательское сообщение на испанском языке.

Мне интересно, есть ли способ получить имя столбца и тип данных из исключения. Я хотел бы указать пользователю значение проблемы, чтобы он мог изменить файл Excel и загрузить его снова.

Заранее спасибо и извините за мой английский.

1 ответ

Решение

Как насчет чего-то такого простого, чтобы получить провальный ряд?

public DocAdmin.GHDefinitionDataTable ConvertDataTable(DataTable dtOriginal)
{

    DocAdmin.GHDefinitionDataTable ghDefiniton = new DocAdmin.GHDefinitionDataTable();
    int ExcelRowNumber = 1;
    foreach (DataRow row in dtOriginal.Rows)
    {
        ++ExcelRowNumber;
        try
        {
            ghDefinition.ImportRow(row);
        }
        catch (ArgumentException ex)
        {
          System.Windows.Forms.MessageBox.Show("Error on line " + ExcelRowNumber)
        }

    }
    return ghDefinition;
}

Чтобы узнать точное значение при сбое модуля импорта, вам нужно взглянуть на само определение DocAdmin.GHDefinitionDataTable. Трудно сказать, не зная, как работает этот бит.

Другие вопросы по тегам