Search code examples
c#exceldatatable

How to remove empty rows from DataTable


I am working on importing data from an Excel sheet to database. The Excel sheet contains few empty rows and I want to remove those empty rows, then insert cleared data into database.
I have written a code by referring other code, this is the code for inserting values:

OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + txtExcelFile.Text + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'");
//DataTable dt = new DataTable();

try
{
    cnn.Open();
    OleDbDataAdapter data = new OleDbDataAdapter("select * from [Customers$]", cnn);
    data.Fill(dsExcel);
    dgvCustomers.ColumnHeadersVisible = false;

    SqlConnection connection = new SqlConnection("Data Source=COMPUTER-8EB749;Initial Catalog=KITS;Integrated Security=true");
    connection.Open();
    for (int i = 0; i < dsExcel.Tables[0].Rows.Count; i++)
    {
        string ID = ds.Tables[0].Rows[i][0].ToString();
        Int16 CustID = Convert.ToInt16(ID);
        string CustName = dsExcel.Tables[0].Rows[i][1].ToString();
        string CardScheme = dsExcel.Tables[0].Rows[i][2].ToString();
        string Outlet = dsExcel.Tables[0].Rows[i][3].ToString();
        string TerminalNum = dsExcel.Tables[0].Rows[i][4].ToString();
        Int32 Terminal = Convert.ToInt32(TerminalNum);
        string Date1 = dsExcel.Tables[0].Rows[i][5].ToString();
        DateTime Date = Convert.ToDateTime(Date1);
        string Time = dsExcel.Tables[0].Rows[i][6].ToString();
        DateTime DateTime = Convert.ToDateTime(Time);
        string Amount1 = ds.Tables[0].Rows[i][7].ToString();
        double Amount = Convert.ToDouble(Amount1);

        SqlCommand com = new SqlCommand("insert into Customer(CustID,CustName,CardScheme,Outlet,TerminalNum,TranDate,TranDateTime,Amount) values ('" + CustID + "','" + CustName + "','" + CardScheme + "','" + Outlet + "','" + Terminal + "','" + Date + "','" + DateTime + "','" + Amount + "')", connection);
        com.ExecuteNonQuery();
    }
    connection.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    MessageBox.Show("Data Inserted Successfully.");
}

Can anyone say me how can I remove empty rows so that i can insert only data?!

Excel Sheet


Solution

  • Try this.

    public bool InsertRowsToDataBase()
    {
        try
        {
            DataTable excelTable = new DataTable();
    
            string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + txtExcelFile.Text + "';Extended Properties= 'Excel 8.0;HDR=Yes;IMEX=1'";
            using (OleDbConnection cnn = new OleDbConnection(connString))
            {
                string query = "select * from [Customers$]";
                using (OleDbDataAdapter data = new OleDbDataAdapter(query, cnn))
                {
                    data.Fill(excelTable);
                }
            }
            dgvCustomers.ColumnHeadersVisible = false;
    
            connString = "Data Source=COMPUTER-8EB749;Initial Catalog=KITS;Integrated Security=true";
            using (SqlConnection connection = new SqlConnection(connString))
            {
                connection.Open();
                for (int i = 0; i < excelTable.Rows.Length; i++)
                {
                    //takes from the 3rd row
                    if (i > 1)
                    {
                        DataRow row = excelTable.Rows[i];
                        object ID = row[0];
                        if (ID != null && !String.IsNullOrEmpty(ID.ToString().Trim()))
                        {
                            Int16 CustID = Convert.ToInt16(ID);
                            string CustName = row[1].ToString();
                            string CardScheme = row[2].ToString();
                            string Outlet = row[3].ToString();
                            string TerminalNum = row[4].ToString();
                            Int32 Terminal = Convert.ToInt32(TerminalNum);
                            string Date1 = row[5].ToString();
                            DateTime Date = Convert.ToDateTime(Date1);
                            string Time = row[6].ToString();
                            DateTime DateTime = Convert.ToDateTime(Time);
                            string Amount1 = row[7].ToString();
                            double Amount = Convert.ToDouble(Amount1);
    
                            string columnNames = "CustID,CustName,CardScheme,Outlet,TerminalNum,TranDate,TranDateTime,Amount";
                            string query = String.Format("insert into Customer(0}) values ('{1}', '{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
                                columnNames, CustID, CustName, CardScheme, Outlet, Terminal, Date, DateTime, Amount);
                            using (SqlCommand com = new SqlCommand(query, connection))
                            {
                                com.ExecuteNonQuery();
                            }
                        }
                    }
                    //this is your last row. do whatever you want with this
                    DataRow lastRow = excelTable.Rows[excelTable.Rows.Count - 1];
                }
            }
            return true;
        }
        catch (Exception exception)
        {
            Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
            return false;
        }
    }
    

    Please note that I am just checking if ID is null and not inserting any such rows as ID will be the PK in your table.