我想知道如果表已经有该字段的记录,如何防止重复输入数据库表。
在我的表格列名中:网站是唯一列。我上传的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);
}
答案 0 :(得分:1)
如何修改传递给OleDbCommand的查询以仅选择您需要的网站值?
如果整行是重复的 - 您可以使用distinct。有关示例,请参阅How to select unique records by SQL。
如果只重复此列并且其他列不相关,则distinct可能不起作用(取决于数据库),您必须使用GROUP BY并选择每个组的第一行。
答案 1 :(得分:0)
您可以做的一件事是首先将其加载到一个没有限制的临时表中。然后,您可以删除所有与业务要求不匹配的记录(例如重复键),并记录您删除的记录和原因(可选,但可能有用)。最后,您可以将临时表插入/合并到最终表中。
或者,您可以将所有内容加载到临时表中,并将业务逻辑放在insert / merge语句中,只插入有效的记录。