Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导入csv文件时添加的重复产品_C#_Csv_Import_Sqlbulkcopy - Fatal编程技术网

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

C# 导入csv文件时添加的重复产品,c#,csv,import,sqlbulkcopy,C#,Csv,Import,Sqlbulkcopy,我正在使用下面的代码将csv文件导入SQLServer2008,问题是,它将重复记录添加到表中,我如何检查以避免重复记录导入,下面是我正在使用的代码,我从某个地方复制了,忘记了链接,因此无法引用它,代码在导入数据时工作正常,但在导入之前它不会进行检查,我在表中使用的主键是productid,下面是代码,如有任何帮助或建议,将不胜感激: SqlConnection con = new SqlConnection(@"Data Source=xxxxxxxx;Initial Catalog=xxxx

我正在使用下面的代码将csv文件导入SQLServer2008,问题是,它将重复记录添加到表中,我如何检查以避免重复记录导入,下面是我正在使用的代码,我从某个地方复制了,忘记了链接,因此无法引用它,代码在导入数据时工作正常,但在导入之前它不会进行检查,我在表中使用的主键是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,

在执行SQLBulkCopy时。。约束或日志记录是否已关闭或禁用。。听起来你可能需要想出自己的Delta机制。。你有触发器或主键约束设置吗没有我只有一个简单的表,有8-9个字段和一个主键ASP.NET与这个问题有什么关系?删除了标签并修复了标题。如何添加productid进行检查?最后一个变体?最简单的方法是:1。创建行并填充它,2。获取与
productid
列3对应的值。检查该值是否已存在,4。如果是,则删除该行,否则将该行添加到表中,并将该值添加到arraydt.Columns.add(newdatacolumn(dc));这是用来创建专栏的。这将告诉您哪个列包含productid<代码>行=dt.NewRow();row.ItemArray=值方面将为记录提供productid的值。