produits en double ajoutés lors de l'importation de fichiers csv

c# csv import sqlbulkcopy

Question

J'utilise le code ci-dessous pour importer les fichiers csv sur sqlserver 2008, le problème est, son ajout d'enregistrements en double sur la table, comment puis-je vérifier pour éviter l'importation d'enregistrements en double, ci-dessous le code que j'utilise, que j'ai copié Quelque part, et j'ai oublié le lien, je ne peux pas le référencer, le code fonctionne bien car il importe les données, mais il ne vérifie pas avant d'importer, la clé primaire que j'utilise pour ma table est productid, ci-dessous le code, toute aide ou suggestion. sera apprécié:

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(); 

}

Réponse populaire

Normalement, vous devriez pouvoir définir le champ PK comme productid . L'insertion échouera automatiquement si elle est dupliquée ...

Vous pouvez également trier le DataTable, passer à travers et traiter les lignes dupliquées avec une certaine logique.

Une autre solution consiste à ajouter le productid dans une sorte de tableau interrogeable et à le vérifier avant d'ajouter une nouvelle ligne.

HTH,



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi