Я импортирую таблицу Excel в DataTable, используя соединение oledb, как показано ниже.
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. Он также читает эти пустые строки вместе с непустыми строками, и сохранение данных в базе данных не выполняется из-за нарушения бизнес-правила (отсутствует обязательное поле).
То, что я пытался поставить условие где в запросе:
"SELECT * FROM WHERE not [CandidateId*] = 0 or not [Firstname*] = '' or not [Lastname] = '' or not [type*] = '' or not [DOB*] =" + DBNull.Value
Таким образом, он будет выбирать только те строки, в которых есть данные.
Но я не могу сравнивать не строковое поле, то есть дату, целое число и т. Д., Которые появляются как DBNull, когда пусто.
Может ли кто-нибудь, пожалуйста, предложить способ сделать это, я не хочу использовать DataReader.