我使用下面的代码将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();
}
答案 0 :(得分:1)
通常,您应该能够将PK字段设置为productid
。如果重复插入,插入将自动失败...
你也可以sort使用DataTable,通过一些逻辑传递和处理重复的行。
另一个解决方案是将productid
添加到某种可搜索的数组中,并在添加新行之前检查它。
HTH,