以下代码采用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
谢谢!
答案 0 :(得分:2)
在这种情况下,除非基于DataTable
,否则您将无法执行此类验证。此外,在失败之前,您能够获得该阵列的唯一方法是隐藏类LoadDataRow
之类的方法。简而言之,以你现在加载数据的方式捕获它是非常不现实的。
有一点需要考虑的是这个。不要利用Fill
,而是获取DbDataReader
并手动浏览每一行。这可以让你做这样的事情:
int val;
if (!int.TryParse(qtyValFromReaderRow, out val))
{
// handle the error
}