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

标签 c# mysql database csv

我正在努力验证 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/

相关文章:

c# - Visual Studio 2010 "System.Web"引用未解决 [C#]

c# - 在使用 block 或使用 block 声明中声明 IDisposable 成员的区别?

c# - Alpha channel 透明度和调整图像文件大小

java - 如何避免有趣的字符并在插入数据库之前进行 sanitizer ?

mysql - 查询具有特定条件的消息的线程列表

sql - 仅显示加入 MySQL 表的最近日期

database - 我应该使用哪个 aws 数据库?

C#二叉搜索树

mySQL 在 codeigniter 中的帮助

python - 如果我从 Django 查询集中删除行然后再次过滤怎么办?