Partage
  • Partager sur Facebook
  • Partager sur Twitter

Blocage au niveau du BulkCopy.WriteToServer

    11 septembre 2023 à 13:44:00

    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 :

     
    {
            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. :-)
    • Partager sur Facebook
    • Partager sur Twitter
      11 septembre 2023 à 16:23:49

      pas d'erreur au niveau du log côté serveur mySQL ?

      Tu as vérifié la correspondance de tes colonnes au niveau de ton ColumnMapings ?
      Si tu n'as pas d'ID dans la DataTable, il me semble qu'il ne devrait pas y en avoir dans la table de destination (en tout cas au niveau des colonnes indiquées)

      • Partager sur Facebook
      • Partager sur Twitter
        11 septembre 2023 à 22:10:41

        Bonjour umfred, 

        Je te remercie pour ta réponse, en effet dans ma table de destination j'ai bien un ID mais il devrait être autogénéré, de plus il s'agit d'une BDD SQL Server, et au niveau du colonne mapping, j'ai vérifier même avec un debug pas à pas et les colonnes sont bien les bonnes. Je dois quand même signalé un détail, quand je met la colonne ID en dans la BDD en clé primaire, le code n'insère pas les données, et il fait dans le cas contraire. 

        • Partager sur Facebook
        • Partager sur Twitter

        Blocage au niveau du BulkCopy.WriteToServer

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown