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

VB.NET Discussion :

lecture et écriture dans une base :o


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut lecture et écriture dans une base :o
    Bonjour,

    Pouvez vous m'aider ?
    Merci déjà d'avoir lu mon message

    DOnc je suis développeur DEBUTANT, donc pas de ouhhh svp

    voila mon souci
    Une base de donnée SQLSERVER génère un fichier .txt dans ce fichier on retrouve sur chaque ligne 2 champs qui sont écrit de cette facon
    "1542848562842//articles 1"
    Ce fichier txt est ensuite envoyé à un pocket pc qui est sous windows mobile 5.0
    dans ce pocket pc il y a un programme qui est censé récupérer ce fichier txt et le lire et faire des "insert" dans une base de données sqlCE chaque champs du fichier correspondant à un champs de la table "articles" .
    voila donc tout marche très bien mais le problème c'est que ces trop lent en effet 50 000 lignes dans le fichier txt et je faisais un insert pour chaque ligne ce qui donne plus de 10 min d'attente (énorme)
    Donc je cherche une solution pour optimiser tout ca
    une solution du coté du code car le fichier txt recu sera toujours en txt je ne peux pas demander une simple synchro base de donnée sqlSErver et sqlServerCE
    Voila merci pour votre aide

    voici le code : Je rappelle que c'est écrit en vb.net peu importe le type de connexion mais il me semble que le xmlShema ne marche pas en pocketpc


    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
     If File.Exists(sFichier) Then
     
                    sr = New StreamReader(sFichier)
     
     
                    If sr.Peek <> -1 Then 'si le fichier n'est pas vide
                        PSqlCeCommand = PSqlCeConnection.CreateCommand()
                        PSqlCeCommand.CommandText = "DELETE FROM Articles"
                        PSqlCeCommand.ExecuteNonQuery() 'effacement de la table articles
                        PSqlCeCommand.Dispose()
     
                        Do Until sr.Peek = -1 'scan de chaque ligne du fichier jusk'a la fin
     
                            sLigne = sr.ReadLine()
     
                            If sLigne <> "" Then 'evite les lignes vides qui provoquent des erreurs
     
     
                                sEnr = sLigne.Split(CsSeparateur)
                                sCB = sEnr(0)
                                sLibLong = sEnr(2)
     
     
     
     
                                sTest = "INSERT INTO Articles (CodeBarre, LibelleLongArticle) VALUES ('" & sCB & "','" & sLibLong & "')"
     
                                PSqlCeCommand = PSqlCeConnection.CreateCommand()
     
                                PSqlCeCommand.CommandText = sTest
     
                                PSqlCeCommand.ExecuteNonQuery()
                                PSqlCeCommand.Dispose()
     
                            End If
     
                        Loop
     
                    End If
     
                End If
    Merci encore..

  2. #2
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour,

    Je ne suis spécialiste du FrameWork mobile mais je dirai que le fait de passer en XMl n'arrangerai rien au problème. De façon plus générale, je vois deux solutions :

    - Récupérer le fichier .txt de façon plus régulière pour éviter qu'il y ait autant de lignes, et etre sûr que chaque ligne nécessite d'etre 'redescendue' et synchronisée (mettre un flag dans la base SQl 'synchroOK' par exemple).

    -Augmenter la puissance du PPC ou le débit entrant de la connexion pour récupérer le fichier .txt

    Bon courage

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu pourrais améliorer un peu les perfs en ne recréant pas PSqlCeCommand à chaque fois. Pour cela, il faut créer une commande avec des paramètres. Tu crées la commande au début, et ensuite à chaque passage dans la boucle tu changes les paramètres. Ca évite que SQL Server recompile la commande à chaque fois...
    Voilà comment faire (je suis pas certain des détails, j'utilise pas SQLServer d'habitude...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PSqlCeCommand = PSqlCeConnection.CreateCommand()
    PSqlCeCommand.CommandText = "INSERT INTO Articles (CodeBarre, LibelleLongArticle) VALUES (@CB,@LibLong)"
    PSqlCeCommand.Parameters.Add("@CB", SqlDbType.NVarChar)
    PSqlCeCommand.Parameters.Add("@LibLong", SqlDbType.NVarChar)
     
    Do Until ...
    ...
    PSqlCeCommand.Parameters["@CB"].Value = sCB
    PSqlCeCommand.Parameters["@LibLong"].Value = sLibLong
    PSqlCeCommand.ExecuteNonQuery
    ...
    Loop

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut
    Tout d'abord merci à ceux qui ont répondu j'ai essayé le code que t as écrit et ca a pas l'air de marcher,
    bon je suis toujours à la recherche d'une solution
    Si il y a des pros bienvenue bienvenue

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    j'ai écrit ce code vite fait, mais y a sans doute des petites modifs à apporter... regarde dans la doc comment utiliser des paramètres pour ta commande

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 24
    Par défaut
    Oui, ton code j'ai réussi à le faire fonctionner;
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PSqlCeCommand = PSqlCeConnection.CreateCommand()
    PSqlCeCommand.CommandText = "INSERT INTO Articles (CodeBarre, LibelleLongArticle) VALUES (?, ?)"
    PSqlCeCommand.Parameters.Add("@CB", SqlDbType.NVarChar)
    PSqlCeCommand.Parameters.Add("@LibLong", SqlDbType.NVarChar)
     
    'et voici ce qu'il faut rajouter dans la boucle
    '.....
     PSqlCeCommand.Parameters(0).Value() = sCB.ToString
    PSqlCeCommand.Parameters(1).Value() = sLibLong
    PSqlCeCommand.ExecuteNonQuery()
    '....
    Ca marche mieux c'est vrai mais au lieu de 15 min je suis à 12 min c'est pas la fête on dirait
    Mais ca m'a permis d'apprendre une autre syntaxe merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/04/2011, 01h09
  2. Réponses: 5
    Dernier message: 19/08/2010, 02h10
  3. Réponses: 5
    Dernier message: 21/07/2007, 09h20
  4. [ODBC] écriture dans une base access 97
    Par menuge dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/05/2007, 13h24
  5. Réponses: 3
    Dernier message: 23/03/2007, 07h54

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