如何从异常中获取特定信息以将其添加到我自己的消息中?

时间:2018-03-21 12:30:54

标签: c# .net dataset exceldatareader

我正在从xlx / xlxs文件中检索数据。我实际上是使用ExcelDataReader库使用ExcelDataReader插件将数据保存到DataSet中。

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 个答案:

答案 0 :(得分:0)

如此简单的事情怎么样才能得到失败的行?

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定义本身。如果不知道这个位是如何工作的话,很难说清楚。