在填写DataTable之前验证数据?

时间:2013-07-10 17:31:15

标签: c# .net ado.net

以下代码采用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  

谢谢!

1 个答案:

答案 0 :(得分:2)

在这种情况下,除非基于DataTable,否则您将无法执行此类验证。此外,在失败之前,您能够获得该阵列的唯一方法是隐藏LoadDataRow之类的方法。简而言之,以你现在加载数据的方式捕获它是非常不现实的。

有一点需要考虑的是这个。不要利用Fill,而是获取DbDataReader并手动浏览每一行。这可以让你做这样的事情:

int val;
if (!int.TryParse(qtyValFromReaderRow, out val))
{
    // handle the error
}