1
以下代碼獲取Excel文件並將其加載到DataTable中。如果文件列中的值與DataTable列的DataType不匹配,則程序將拋出一個System.ArgumentException
。在填寫DataTable之前驗證數據?
例如,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
謝謝!
謝謝..我現在正在調查。因此,基本上是通過'DbDataReader'逐行驗證,然後將該行添加到'DataTable'? –
@JeffBrady,這是絕對正確的!你應該可以使用'LoadRow'或'ImportRow'並且傳遞一個簡單的'object []'。 –
明白了..我重寫了我的代碼以使用'DbDataReader',創建'DataRow'並執行'DataTable.Rows.Add(DataRow)'並且它可以工作。現在我只需要爲每個DataRow項目編寫驗證,我應該沒問題。再次感謝! –