我正在尝试将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。
如何解决从代码插入数据库的重复数据问题?
答案 0 :(得分:0)
在DataSet中获得数据后,您不应再使用ExcelDataReader了 - 数据已经加载到DataSet中。
此外,在下一行覆盖该值时,使用新的DataTable()没有任何意义。