将Excel导入数据库

时间:2015-06-04 22:24:44

标签: c# database excel winforms

我正在尝试将Excel文档导入数据库。

我已成功完成此操作,但是,出现的问题是,我试图插入的数据被插入四次而不是一次。

这是我的代码:

private void upload_button_Click(object sender, EventArgs e)
{
    if ((tick.Visible != true)|(string.IsNullOrWhiteSpace(cat_combobox.Text))|(string.IsNullOrWhiteSpace(subcat_combobox.Text)))
    {
        MessageBox.Show("Select an excel file.", "Error: Missing Excel Data", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        try
        {
            FileStream fs = File.Open(filepath, FileMode.Open, FileAccess.Read);
            IExcelDataReader excelreader = ExcelReaderFactory.CreateOpenXmlReader(fs); //'97-03 USE: CreateBinaryReader, 07+ USE: CreateOpenXmlReader
            //CREATE COLUMN NAMES FROM FIRST ROW
            excelreader.IsFirstRowAsColumnNames = true;
            DataSet ds = excelreader.AsDataSet();
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            while (excelreader.Read())
            {
                foreach (DataRow row in dt.Rows)
                {
                    if ((!(row["Item"].Equals(DBNull.Value))) | (!(row["Quantity"].Equals(DBNull.Value))) | (!(row["Date"].Equals(DBNull.Value))))
                        importtodb(Convert.ToInt32(this.cat_combobox.SelectedValue), this.subcat_combobox.Text.ToString(), row["Item"].ToString(), Convert.ToInt32(row["Quantity"]), row["Date"].ToString());
                }
            }
            excelreader.Close();
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

}

private void importtodb(int catid, string subcat, string item, int quantity, string date)
{
    using (var sqlcmd = new SqlCommand("INSERT INTO inventory_table (categoryid, Subcategory, Item, Quantity, Date) VALUES(@catid, @subcat, @item, @quantity, @date)", sqlconnection))
    {
        sqlcmd.Parameters.AddWithValue("@catid", catid);
        sqlcmd.Parameters.AddWithValue("@subcat", subcat);
        sqlcmd.Parameters.AddWithValue("@item", item);
        sqlcmd.Parameters.AddWithValue("@quantity", quantity );
        sqlcmd.Parameters.AddWithValue("@date", date);
        sqlcmd.ExecuteNonQuery();
    }
}

注意:我正在使用ExcelDataReader。

如何解决从代码插入数据库的重复数据问题?

1 个答案:

答案 0 :(得分:0)

在DataSet中获得数据后,您不应再使用ExcelDataReader了 - 数据已经加载到DataSet中。

此外,在下一行覆盖该值时,使用新的DataTable()没有任何意义。