1

以下代码采用 Excel 文件并将其加载到 DataTable 中。如果文件列中的值与 DataTable 列的 DataType 不匹配,则程序会抛出System.ArgumentException.

例如,DataTable 中的 QTY 列是,Int32但电子表格中的第 5 行的值是 40O 而不是 400。如何在数据加载到 DataTable 之前或期间检查数据,并告知用户哪一行/列有无效值?

//"file" = c:\myfile.xlsx

string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + file + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", file);

using (OleDbConnection dbConnection = new OleDbConnection(strConn))
{
    using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", dbConnection))
    {
        dbAdapter.Fill(InputTable);
    }
}

这些列是:

ColumnName    DataType  
ID            System.String  
QTY           System.Int32  
DOS           System.DateTime  

谢谢!

4

1 回答 1

2

在这种情况下,除非您基于DataTable. 此外,在该数组失败之前,您能够访问该数组的唯一方法是隐藏类似LoadDataRow. 简而言之,以您现在加载数据的方式来捕捉这种情况确实是不现实的。

要考虑的一件事是这一点。与其利用 ,不如手动Fill获取DbDataReader并运行每一行。这将允许您执行以下操作:

int val;
if (!int.TryParse(qtyValFromReaderRow, out val))
{
    // handle the error
}
于 2013-07-10T17:45:39.260 回答