导入csv文件时添加的重复产品

c# csv import sqlbulkcopy

我使用下面的代码将csv文件导入sqlserver 2008,问题是,它将重复记录添加到表中,我如何检查以避免重复记录导入,下面是我正在使用的代码,我已经复制了在某个地方,并且忘记了链接,因此无法引用它,代码在导入数据时工作正常,但它在导入之前没有检查,我用于我的表的主键是productid,下面是代码,任何帮助或建议将不胜感激:

SqlConnection con = new SqlConnection(@"Data Source=xxxxxxxx;Initial Catalog=xxxx;Persist Security Info=True;User ID=xx;Password=xxx");
    string filepath = Server.MapPath(FileUpload1.FileName);//"C:\\params.csv";
        StreamReader sr = new StreamReader(filepath);
        string line = sr.ReadLine();
        string[] value = line.Split(',');
        DataTable dt = new DataTable();
        DataRow row;
        foreach (string dc in value)
        {
            dt.Columns.Add(new DataColumn(dc));
        }

        while ( !sr.EndOfStream )
        {
            value = sr.ReadLine().Split(',');
            if(value.Length == dt.Columns.Count)
            {
                row = dt.NewRow();
                row.ItemArray = value;
                dt.Rows.Add(row);
            }
        }
        SqlBulkCopy bc = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.TableLock);
        bc.DestinationTableName = "products";
        bc.BatchSize = dt.Rows.Count;
        con.Open();
        bc.WriteToServer(dt);
        bc.Close();
        con.Close(); 

}

热门答案

通常,您应该能够将PK字段设置为productid 。如果重复,插入将自动失败...

您还可以 DataTable进行排序 ,使用某些逻辑传递并处理重复的行。

另一个解决方案是将productid添加到某种可搜索的数组中,并在添加新行之前对其进行检查。

HTH,



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因