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

时间:2017-03-08 18:05:12

标签: 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

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

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中的重复记录,只对重复的记录进行插入。

2 个答案:

答案 0 :(得分:3)

根据您的评论,您只想插入两个重复的记录。在您的示例中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演示

答案 1 :(得分:0)

我认为你可以添加&#34;其中@duplicate喜欢&#39; yes&#39;&#34;在查询中。