gpt4 book ai didi

c# - 仅将 csv 中的重复记录插入数据库

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:56 26 4
gpt4 key购买 nike

我正在努力验证 csv,然后再将它们插入数据库。我已经完成了将它们插入数据库的工作,但不确定如何验证重复记录并仅将重复记录插入数据库。Csv 如下所示,我们可以接收 ProdID 作为 CSV 中的重复项

ProdID,Name,Color,Availability
P01,Product1,Red,Yes
P02,Product2,Blue,Yes
P03,Product3,Yellow,No
P01,Product4,Red,Yes
P04,Product5,Black,Yes

该表有五个字段,其中一个字段是重复字段

class Products
{
static void Main(string[] args)
{
string location = "\Products.csv";
List<Products> ProductsList= ReadInCSV(location);
var connStr = ConfigurationManager.ConnectionStrings["ProgConnectionString"].ConnectionString;

// Need to validate them before putting them in to the table

string sqlString = "INSERT INTO PRODUCTS (ProdID,Name,Color,Availability,Duplicate) VALUES (@ProdID,@Name,@Color,@Availability,@Duplicate );";
for (int i = 0; i < ProductsList.Count; i++)
{
using (MySqlConnection conn = new MySqlConnection(connStr))
using (MySqlCommand comm = new MySqlCommand(sqlString, conn))
{
comm.Parameters.Add("@ProdID", MySqlDbType.VarChar).Value = ProductsList[i].ProdID;
comm.Parameters.Add("@Name", MySqlDbType.VarChar).Value = ProductsList[i].Name;
comm.Parameters.Add("@Color", MySqlDbType.VarChar).Value = ProductsList[i].Color;
comm.Parameters.Add("@Availability", MySqlDbType.VarChar).Value = ProductsList[i].Availability;
comm.Parameters.Add("@Duplicate", MySqlDbType.VarChar).Value = "Yes";
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}
}
}

我不确定如何检查 csv 中的重复记录并仅插入重复的记录。

最佳答案

根据您的评论,您只想插入两条重复的记录。在您的示例中 p01

这可以通过一个简单的 LINQ 查询来解决:

ProductsList.GroupBy(p => p.ProdID).Where(p => p.Count() > 1).SelectMany(x => x);

这将根据它们各自的 ProdID 对项目进行分组,然后我们仅选择组中包含多个实例的实例。

用这个代替你的 for 循环:

foreach(var prod in ProductsList.GroupBy(p => p.ProdID).Where(p => p.Count() > 1).SelectMany(x => x))
{
using (MySqlConnection conn = new MySqlConnection(connStr))
using (MySqlCommand comm = new MySqlCommand(sqlString, conn))
{
comm.Parameters.Add("@ProdID", MySqlDbType.VarChar).Value = prod.ProdID;
comm.Parameters.Add("@Name", MySqlDbType.VarChar).Value = prod.Name;
comm.Parameters.Add("@Color", MySqlDbType.VarChar).Value = prod.Color;
comm.Parameters.Add("@Availability", MySqlDbType.VarChar).Value = prod.Availability;
comm.Parameters.Add("@Duplicate", MySqlDbType.VarChar).Value = "Yes";
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
}

我创建了一个 fiddle演示

关于c# - 仅将 csv 中的重复记录插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42678687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com