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 :

Faciliter une requete insert


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut Faciliter une requete insert
    Bonjour tout le monde !!

    Je développe une application qui permettra d'insérer dans une base de données des articles a partir d'un fichier Excel. Seuls 12 champs sont concernés mais la table comporte plus de 280 champs qui sont soient nul, ou a 'O', a 'N', a '1' ou '0'. Et je dois tous les renseignés car ils n'ont pas de valeurs par défaut. Je précise que je ne peux pas toucher a la table.

    J'ai donc fait le traitement en utilisant une requete paramétré pour les 12 champs concernés mais je ne me vois pas faire un nouveau paramètre par champ puis le renseigné et enfin l'intégré dans la requete d'insert, ca ferait 560 ligne de parametrage et une ligne d'insert qui ferait des mètres.

    Comment pourrais je faire autrement ? Je pensais faire des update a répétition mais avec VB.NET si je suis obligé de faire une nouvelle SqlCommand par update avec fermeture et ouverture de la connection j'aurais pas fini avant longtemps.

    Voyez vous une solution ?

    Merci pour vos réponses

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    so ton sgbdr (c'est fou le monde qui ne le précise pas) accepte les procédures stockées alors tu peux en faire une qui demande 12 paramètres et insert les 280 champs

    ou dans le pire des cas une sub

    (enfin le design doit être étrange, parce que 280 champs dans un table ... et qu'ils n'aient pas de valeur par défaut ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Oops désolé c'est SQL Server.

    Pourrais tu préciser ce que tu entends par faire une sub et comment inséré les autres champs dans la procédure stockée ?

    Voila comment j'ai fait la mienne :

    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
    ctn = New SqlClient.SqlConnection
                ctn.ConnectionString = Connexion a ma base
                ctn.Open()
                cmd = New SqlClient.SqlCommand
                cmd.Connection = ctn
     
                With cmd.Parameters
                    .Add(New SqlParameter("@codearticle", SqlDbType.VarChar, 30))
                    .Add(New SqlParameter("@designation", SqlDbType.VarChar, 100))
                    .Add(New SqlParameter("@codefamille", SqlDbType.VarChar, 30))
                    .Add(New SqlParameter("@sousfamille", SqlDbType.VarChar, 30))
                    .Add(New SqlParameter("@motdirecteur", SqlDbType.VarChar, 100))
                    .Add(New SqlParameter("@typeproduit", SqlDbType.SmallInt, 2))
                    .Add(New SqlParameter("@natureproduit", SqlDbType.Char, 1))
                    .Add(New SqlParameter("@unite", SqlDbType.VarChar, 30))
                    .Add(New SqlParameter("@coutfabric", SqlDbType.Float, 8))
                    .Add(New SqlParameter("@delai", SqlDbType.SmallInt, 2))
                    .Add(New SqlParameter("@seuil", SqlDbType.Float, 8))
                    .Add(New SqlParameter("@qteeco", SqlDbType.Float, 8))
                End With
                With cmd
                    .Parameters("@codearticle").Value = pcodearticle
                    .Parameters("@designation").Value = pdes
                    .Parameters("@codefamille").Value = pfam
                    .Parameters("@sousfamille").Value = pssfam
                    .Parameters("@motdirecteur").Value = pmotd
                    .Parameters("@typeproduit").Value = ptypeprod
                    .Parameters("@natureproduit").Value = pnature
                    .Parameters("@unite").Value = punite
                    .Parameters("@coutfabric").Value = pcoutfab
                    .Parameters("@delai").Value = pdelai
                    .Parameters("@seuil").Value = pseuil
                    .Parameters("@qteeco").Value = pqteeco
                End With
                cmd.CommandText = "insert into article(codearticle,designation1,codefamille,sousfamille,motdirecteur,typeproduit,artachoufab,unite,coutfabrication,delaiappromononiv,seuilminimum,quantiteeconomique) values (@codearticle, @designation, @codefamille, @sousfamille, @motdirecteur, @typeproduit, @natureproduit, @unite, @coutfabric, @delai, @seuil, @qteeco)"
                cmd.ExecuteNonQuery()
                ctn.Close()
    Pour ce qui est de la table, elle provient d'un ERP et je n'ai pas le droit de la modifier. Il y a énormément de champs car on peut en faire une utilisation très poussée ce qui n'est pas notre cas donc beaucoup de champs inutiles.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    C'est ce que j'ai fait au dessus mais y a t il un moyen de rentrer des données SQL fixes plus rapidement que passer par des paramètres ?

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into table (ch1, ch12,ch13,ch280) values (@ch1,@ch12,1,'N')
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Bah oui je viens d'en parler a un collègue et le seul fait de le dire a haute voix m'a indiqué mon erreur.

    Je n'ai effectivement pas besoin de paramètres pour mes données fixes

    Sinon y'a t il un moyen d'insérer plus rapidement des données dans la base ? car meme sans cela mon insert va avoir donc 280 * 2 mots ce qui est enorme et y a de grandes chances que j'en oublie.

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    un insert de 280 champs prend le temps d'un insert de 280 champs tu pourras pas y faire grand chose
    qui peut parfois être dérisoire si le serveur est équipé en fonction de ce qu'il doit faire et qu'il n'y a pas des tonnes d'indexes étranges

    y a peut etre des pistes à tester si tu dois insérer plusieurs lignes en même temps
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Oki. Je demande ca car j'ai fait un petit developpement avec le langage de l'ERP et j'avais fais l'insertion d'un article ce qui revient au meme. Mais j'avais fait la requete d'insert de ma clé primaire soit le codearticle et le reste j'avais fais un update pour chaque autre champ soit du copié collé qui est plus pratique que de tout faire en une seule ligne. Mais avec VB si je dois faire une SqlCommande par update ca me prendra au moins autant de temps.

    Une petite idée ? sinon tant pis je vais taper

  10. #10
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    si au lieu de faire un insert de x champs tu faisais un insert d'un champ puis x-1 update, vaut mieux faire juste un insert, c'est plus performant
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Par défaut
    Oui je sais mais la derniere fois je devais me depecher de finir, je vais prendre le temps aujourd'hui et demain je n'ai que ca a faire pour le moment.

    Merci beaucoup pour ta patience et tes réponses !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. compl. nombre decimal dans une requete insert
    Par loic72 dans le forum Access
    Réponses: 2
    Dernier message: 31/05/2006, 11h43
  2. [VB6] exécution d'une requete Insert dans oracle 9.2
    Par krest dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/04/2006, 13h28
  3. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  4. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32
  5. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05

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