Как я могу получить конкретную информацию из исключения, чтобы добавить ее в свое собственное сообщение?
Я получаю данные из файла 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. Трудно сказать, не зная, как работает этот бит.