0

我想知道如何防止重复输入数据库表,以防表已经有该字段的记录。

正如我的表列名:网站是唯一列。而且我上传的 excel 文件可能具有与新数据相同的记录,或者可能具有完全重复的记录,因此基于列名网站,我想防止输入该重复条目,然后输入另一个下一条记录,然后继续。

我希望它清楚,这是我的代码:

    protected void btnSend_Click(object sender, EventArgs e)
{
    //file upload path
    string path = fileuploadExcel.PostedFile.FileName;
    //Create connection string to Excel work book
    string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\File.xlsx';Extended Properties=Excel 12.0;Persist Security Info=False";
    //Create Connection to Excel work book
    OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
    //Create OleDbCommand to fetch data from Excel
    OleDbCommand cmd = new OleDbCommand("Select * from [Sheet1$]", excelConnection);
    excelConnection.Open();
    OleDbDataReader dReader;
    DataTable table = new DataTable();
    dReader = cmd.ExecuteReader();
    table.Load(dReader);
    SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
    //Give your Destination table name
    sqlBulk.DestinationTableName = "TableName";
    sqlBulk.WriteToServer(table);
    excelConnection.Close();

    int numberOfRowsInserted = table.Rows.Count;// <-- this is what was written.

    string message = string.Format("<script>alert({0});</script>", numberOfRowsInserted);
    ScriptManager.RegisterStartupScript(this, this.GetType(), "scr", message, false);
}
4

2 回答 2

1

如何修改您传递给 OleDbCommand 的查询以仅选择您需要的网站值?

如果整行是重复的 - 您可以使用 distinct。有关示例,请参阅如何通过 SQL 选择唯一记录。

如果仅此列重复而其他列不相关,则 distinct 可能不起作用(取决于数据库),您将不得不使用 GROUP BY 并选择每个组的第一行。

于 2013-08-07T07:53:59.610 回答
0

您可以做的一件事是首先将其加载到没有限制的临时表中。然后,您可以删除所有与您的业务需求不匹配的记录(例如重复键)并记录您删除了哪些记录以及删除的原因(可选,但可能很有用)。最后,您可以将临时表插入/合并到最终表中。

或者,您可以将所有内容加载到临时表中并将业务逻辑放入插入/合并语句中,仅以这种方式插入有效记录。

于 2013-08-07T07:55:13.473 回答