Bonjour,

Je me permets de solliciter votre aide à la suite d'un problème que j'ai rencontré en utilisant bulkcopy pour insérer une masse importante de données dans ma BDD sql server.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
{
        try
        {
            using (var objConn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["test"].ConnectionString))
            {
                objConn.Open();
                var transaction = objConn.BeginTransaction();
                using (var bulkCopy = new SqlBulkCopy(
                    objConn,
                    SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints,
                    transaction))
                {
                    bulkCopy.DestinationTableName = structImport.nomTable;
 
                    for (int i = 0; i < structImport.attributs.Length; i++)
                        bulkCopy.ColumnMappings.Add(ValidDataTable.Columns[i].ToString(), structImport.attributs[i]);
                    bulkCopy.WriteToServer(ValidDataTable);
                    transaction.Commit();
                    success("import de " + ValidDataTable.Rows.Count + " données");
                }
            }
            pnlPopup.Visible = false;
        }
        catch (Exception ex)
        {
            erreur(ex.Message);
        }
J'ai effectué plusieurs investigation et j'ai constaté que la requête ne bloque pas au niveau du code c# mais bien au niveau la base de données. Il faut savoir que je ne met pas de ID dans ma DataTable, celui-ci doit être généré par la BDD (type de l'ID uniqueidentifier). La clé primaire de la table en question est seulement l'ID. Pour décrire les test:
Si j'effectue le test en enlevant la clé primaire , cela prend beaucoup de temps, (10 seconde pour un test avec 8 insertions) mais on fini toujours par les insérer.
Si je remet la contrainte de clé primaire, l'opération reste bloquée au niveau du SQL server et on fini par une erreur de type TimeOut.

Merci d'avance pour votre aide. :-)