使用文本框 (asp.net) 防止同时、插入或导入重复记录

Posted

技术标签:

【中文标题】使用文本框 (asp.net) 防止同时、插入或导入重复记录【英文标题】:Prevent while, inserting or importing, being duplicate records using textboxs (asp.net) 【发布时间】:2019-09-28 02:56:30 【问题描述】:

我正在做一个程序,它将一个 excel 文件导入数据库,这部分工作正常。但现在我正在努力避免/防止用户插入或导入重复记录。我尝试在所有列中执行复合 KEY 但这不起作用。我得到了期望:“DBNull”......我认为它通过编码以另一种方式存在?

这是我的代码:

protected void Upload_Click(object sender, EventArgs e)
        
            string excelPath = Server.MapPath("~/NewFolder/") + Path.GetFileName(FileUpload1.PostedFile.FileName);

            string filepath = Server.MapPath("~/NewFolder/") + Path.GetFileName(FileUpload1.FileName);
            string filename = Path.GetFileName(filepath);
            FileUpload1.SaveAs(excelPath);
            string ext = Path.GetExtension(filename);

            String strConnection = @"Data Source=Ricky-PC\SQLEXPRESS;Initial Catalog=ImportHere;Persist Security Info=True;User ID=sa;Password=******";
            string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1;\"";


            OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
            excelConnection.Open();
            DataTable schema = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string sheetName = schema.Rows[0]["TABLE_NAME"].ToString();
            OleDbCommand cmd = new OleDbCommand("Select * from ["+sheetName+"]", excelConnection);
            OleDbDataReader dReader;
            dReader = cmd.ExecuteReader();

            using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
            
                sqlBulk.DestinationTableName = "Data";
                sqlBulk.ColumnMappings.Add(0,0);
                sqlBulk.ColumnMappings.Add(1,1);
                sqlBulk.ColumnMappings.Add(2,2);
                sqlBulk.ColumnMappings.Add(3,3);

                sqlBulk.WriteToServer(dReader);
            

            excelConnection.Close();
        

【问题讨论】:

在数据库中这样做是正确的方法。您应该致力于修复数据库架构,而不是尝试在代码中找到“解决方法”。错误的输入数据也可能导致导入问题。 @MarkusDeibel 我猜我必须在代码上执行它......不在查询中 对于那些have the rep, @Larnu 不明白, 复合唯一键是否因为有多个空值而失败?如果是这样,你可以写一个检查约束:w3schools.com/SQL/sql_check.asp 【参考方案1】:

尝试对暂存表进行加载,然后使用存储过程合并到最终表。合并将允许您更新现有记录并插入新记录。这不会插入重复项。如果不需要更新,那么从暂存到最终表的插入也可以工作,因为您可以过滤掉匹配的记录,只插入不匹配现有记录的记录。

【讨论】:

以上是关于使用文本框 (asp.net) 防止同时、插入或导入重复记录的主要内容,如果未能解决你的问题,请参考以下文章

asp.net textarea 换行和防止回发返回键

更新文本框 ASP.NET 时出现问题

强制 ASP.NET 文本框显示带有 $ 符号的货币

ASP.NET点击页面内容出现文本框

在按钮单击文本框值是空的使用 asp.net mvc 显示警报?

如何通过单击一个按钮保存 asp.net 文本框值并将该数据用于另一个按钮单击?