IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Accès aux données Discussion :

sqlbulkcopy


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut sqlbulkcopy
    Bonjour a tous,
    j'ai un souci avec l'instruction sqlbulkcopy. Quand je selection un fichier ayant un nombre de ligne pas important l'affichage s'effectu.
    Le probleme quand je veux importer plus 1000 lignes cela m'affiche un message qui suit:
    Le CLR n'a pas pu effectuer de transition du contexte COM 0x8916c8 au contexte COM 0x891838 pendant 60 secondes. Le thread qui possède le contexte/cloisonnement de destination est probablement en train d'attendre ou de traiter une opération très longue sans pompage des messages Windows. Cette situation a généralement des effets négatifs sur les performances et peut parfois entraîner le blocage de l'application ou une utilisation ininterrompue de la mémoire. Pour éviter ce problème, tous les threads STA (Single Threaded Apartment) doivent utiliser des primitives d'attente de pompage (par exemple CoWaitForMultipleHandles) et pomper de manière régulière les messages lors des opérations qui sont longues à s'exécuter.
    Esperant avoir une suite favorable.
    Merci de m'aider

    Voila mon code qui va chercher les données pour les afficher dans mon datagridview.


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
        Private Sub Selection()
     
            Try
                Dim cb As New SqlConnectionStringBuilder
                cb.DataSource = "EVENS"
                cb.InitialCatalog = "KOTINDA_DB"
                cb.IntegratedSecurity = True
                Dim cnn As SqlConnection = New SqlConnection(cb.ConnectionString)
     
                '----// Source de données
                Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM TEMPORAIRE WHERE num_tel NOT IN ( SELECT msisdn_sub FROM BLACK_LIST )", cnn)
                cnn.Open()
                'Dim rdr As SqlDataReader
                Reader = cmd.ExecuteReader
     
                'Nombre de colonnes dans le datagridview
                Me.dgvNumber.ColumnCount = (Reader.FieldCount)
                'Declaration des lines et des differentes cellulesj
                Dim ligne As DataGridViewRow
                Dim cel As DataGridViewTextBoxCell 'Cellule pour les données
                'lecture des données
                While Reader.Read
                    ligne = New DataGridViewRow
                    'lecture des données dans le reader
                    For i As Integer = 0 To Reader.FieldCount - 1
                        'initialisation des cellules pour les données
                        cel = New DataGridViewTextBoxCell
                        'test si il ya des données
                        If Not Reader.GetValue(i) Is Nothing Then
                            'donne une valuer à la cellule de données
                            cel.Value = Reader(i)
                        End If
                        'ajoutez la cellule avec les données à la ligne
                        ligne.Cells.Add(cel)
                    Next i
                    'ajoutez la ligne dans le datagridview
                    dgvNumber.Rows.Add(ligne)
                    'Delete()
                End While
     
                '----// Instanciation de l'objet sqlbulkcopy
                Dim sbc As SqlBulkCopy = New SqlBulkCopy("server=.;database=KOTINDA_DB;" + "Integrated Security=TRUE")
     
                '----// copie des données
                sbc.DestinationTableName = "TEMPORAIRE"
                sbc.WriteToServer(Reader)
     
                '----Fermeture de la connection
                sbc.Close()
                Reader.Close()
                cnn.Close()
                Catch ex As Exception
                MsgBox(ex.Message)
            End Try

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    Il suffit de modifier la propriété CommanTimeOut de l'object command et le tour est joué.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Il suffit de modifier la propriété CommanTimeOut de l'object command et le tour est joué.

    Régler le timeout(30 secondes par défaut quand même) pour 1000 lignes? vous Avez surtout un gros problème!!!

    Que cherchez vous à faire concretement je n'ai pas bien compris l'interet de la boucle sur le reader avant de faire un bulkinsert sur la table dont vous vous servez déjà pour alimenter le reader????

  4. #4
    Invité de passage
    Profil pro
    devops
    Inscrit en
    Mai 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : devops

    Informations forums :
    Inscription : Mai 2010
    Messages : 2
    Par défaut
    Vu le code de remplissage du Grid, je pense que l'approche est mauvaise.

    La plupart du temps, on alimente un tableau directement avec une liste mémoire que l'on construit à partir d'un résultat de requete, puis on assigne cette liste au tableau.
    Remplir un tableau par parcours des lignes et des colonnes est quelque chose qui me pique les yeux...

    Quelle techno utilisez-vous ? WinForm ? Si c'est le cas, il vaut mieux passer par le DataSource que par un parcours lignes colonne !

    http://www.dotnetperls.com/datagridview-tutorial

Discussions similaires

  1. UPSERT en utilisant le sqlBulkCopy
    Par bellak dans le forum Accès aux données
    Réponses: 0
    Dernier message: 12/06/2010, 13h25
  2. SqlBulkCopy et Option reginale
    Par AJemni dans le forum C#
    Réponses: 2
    Dernier message: 27/05/2009, 16h40
  3. SqlBulkCopy et la Gestion d'erreur
    Par AJemni dans le forum C#
    Réponses: 3
    Dernier message: 28/04/2009, 19h24
  4. SQLBulkCopy et les valeurs nulle
    Par Dschub dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/04/2009, 15h08
  5. SqlBulkCopy & Trigger instead of INSERT
    Par Nono3013 dans le forum Développement
    Réponses: 4
    Dernier message: 07/11/2008, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo