我正在使用oledb连接将Excel表格导入到DataTable中,代码如下。
private static DataTable UploadExcelSheet(string fileName)
{
DataTable uploadDataTable;
using (OleDbConnection objXConn = new OleDbConnection())
{
objXConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName +
";Extended Properties=\"Excel 12.0;IMEX=1\"";
objXConn.Open();
OleDbCommand objCommand =
new OleDbCommand("SELECT * FROM Template$ ", objXConn);
OleDbDataAdapter objDataAdapter = new OleDbDataAdapter();
// retrieve the Select command for the Spreadsheet
objDataAdapter.SelectCommand = objCommand;
// Create a DataSet
DataSet objDataSet = new DataSet();
// Populate the DataSet with the spreadsheet worksheet data
objDataAdapter.Fill(objDataSet);
uploadDataTable = objDataSet.Tables[0];
}
return uploadDataTable;
}
一切运作良好,但当用户在上传 Excel 前删除几行内容时,问题就出现了。它会将这些空行与非空行一起读取,并且由于违反业务规则(缺少必填字段),导致保存数据到数据库失败。 我尝试的方法是在查询中加入 where 条件:
"SELECT * FROM WHERE not [CandidateId*] = 0 or not [Firstname*] = '' or not [Lastname] = '' or not [type*] = '' or not [DOB*] =" + DBNull.Value
因此,它只会选择那些具有数据的行。 但是,我无法比较非字符串字段,即日期、整数等。当为空时,它们将显示为 DBNull。 请问有什么方法可以解决这个问题,我不想使用 DataReader。