Как загрузить только непустые строки электронной таблицы Excel с помощью oledb в C #?

Я импортирую лист 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. Он также считывает эти пустые строки вместе с непустыми, и сохранение данных в базе данных не выполняется из-за нарушения бизнес-правил (отсутствует обязательное поле). Я пробовал поставить условие where в запрос:

"SELECT * FROM  WHERE  not [CandidateId*] = 0 or not [Firstname*] = '' or not [Lastname] = '' or not [type*] = '' or not [DOB*] =" + DBNull.Value

Таким образом, он выберет только те строки, в которых есть данные. Но я не могу сравнивать нестроковые поля, т.е. Date, Integer и т. Д., Которые передаются как DBNull, когда они пусты. Может ли кто-нибудь предложить способ сделать это, я не хочу использовать DataReader.

9
задан Matt Ellen 8 July 2019 в 10:57
поделиться