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

C# Discussion :

[commade dos] éxécuter un sql loader depuis mon programme


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut [commade dos] éxécuter un sql loader depuis mon programme
    Bonjour,
    Je cherche à éxécuter ma commande de mon sql loader dans mon porgramme, j'ai trouvé ca code-ci:
    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
     
    //création du processus
                    System.Diagnostics.Process proc = new System.Diagnostics.Process();
     
     
                    proc.StartInfo.FileName = "cmd.exe";
                    //démarage du processus		  
                    proc.Start();
                    proc.StartInfo.RedirectStandardInput = true;
     
                    //écriture sur l'entrée standard
                    string cmd = "sqlldr login/mdp@ma_base_de_donnée control=C:\LOADER\controle.ctl ROWS=10000 log=C:\LOADER\resultat.log data=C:\LOADER\GESTOR01012008.txt";
                    proc.StandardInput.Write(cmd);
                    //fermeture de l'entrée standard
                    proc.StandardInput.Close();
                    //libération des ressources du processus
                    proc.Close();
    Mais j'ai une erreur qui vient de ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    proc.StandardInput.Write(cmd);
    L'erreur générée par Visual Studio ets :

    StandardIn n'a pas été redirigé

    Je ne sais pas d'ou l'erreur vient donc j'aimerais en savoir plus a propos de cette fonction.Merci

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Pour ton erreur, je crois que c'est assez clair : tu veux écrire sur ton entrée standard avant de s'assurer de sa redirection; un peu comme écrire sur un fichier sans l'ouvrir, car tu positionnes la redirection après le Start; or les info contenu dans StartInfo sont prises en compte avec le start - comme le nom de classe l'indique d'ailleurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                Process proc = new Process();
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.FileName = "cmd.exe";
     
                proc.Start();
    Ce que je ne comprends pas c'est pourquoi tu veux faire cela, plutôt que de lancer directement ta commande en lui passant les paramètres ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Je suis tout a fait d'accord avec toi mais en fait je sais pas comment faire, meme si ca parait logique après des recherches j'ai pas trouver comment faire. Donc si tu avais une piste à m'amener ca serait pas de refus

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ttamttam Voir le message
    Je suis tout a fait d'accord avec toi mais en fait je sais pas comment faire, meme si ca parait logique après des recherches j'ai pas trouver comment faire. Donc si tu avais une piste à m'amener ca serait pas de refus
    Ceci dit, ce que tu fais dois marcher à condition de respecter l'ordre comme je l'ai corrigé au dessus.

    Et en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    proc.StartInfo.FileName = @"sqlldr.exe";
     proc.StartInfo.Arguments = @"login/mdp@ma_base_de_donnée control=C:\LOADER\controle.ctl ROWS=10000 log=C:\LOADER\resultat.log data=C:\LOADER\GESTOR01012008.txt";
    ca donne quoi ?

    EDIT : quotted literal string

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Merci de ta précieuse aide, en fait j'avais mi les commande dans le mauvais ordre, j'avoue j'ai fait un peu le boulet.
    Merci beaucoup, c'est franchement simpa de ta part de m'avoir aidé

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    cela marche ce truc là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc.StartInfo.Arguments = "login/mdp@ma_base_de_donnée control=C:\LOADER\controle.ctl ROWS=10000 log=C:\LOADER\resultat.log data=C:\LOADER\GESTOR01012008.txt";
    Pas besoin de @ ou de doublé les \ ? (cela m'étonne)
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Pas besoin de @ ou de doublé les \ ? (cela m'étonne)
    Si !

    Tu as raison; au temps pour moi.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    En fait le problème n'est pas résolu car en fait en testant tes deux codes la commande du sqlldr ne se lance pas. Mais aucune erreur apparait pour autant.
    Je ne sais plus du tout où chercher l'erreur
    Voila mon code après modifications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                Process proc = new System.Diagnostics.Process();
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.FileName = "cmd.exe";
                proc.Start();
                string cmd = "sqlldr login/mdp@ma_base control="+ Application.StartupPath + "\\controle.ctl ROWS=10000 log="+ Application.StartupPath + "\\resultat.log data=" + Application.StartupPath + "\\GESTOR.txt";
                proc.StandardInput.Write(cmd);
                proc.StandardInput.Close();
                proc.Close();

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    je parie qu tu closes avant que la commande n'est eu le temps de s'exécuter !!!
    Je crois me souvenir d'une methode waitforexit dans Processus
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    J'aurai bien voulu que ca soit ca mais non
    Meme en essayant de lancer la calculatrice ca veut pas passer !
    C'est la débandade totale...

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    essaye la commande dans une console dos directement, et dans exécuter
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé et ca passe comme dans du buerre, le Sqlldr s'éxécute comme il se doit et fait l'insertion dans ma base de donnée.

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Affiche ta string cmd et compare là avec la requête que tu devrias envoyer.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    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
     
                    //création du processus
                    System.Diagnostics.Process proc = new System.Diagnostics.Process();
                    //le paramètre /c indique que la console Dos doit se fermer 
                    //sitôt l'exécution de la commande terminée.
                    proc.StartInfo.FileName = "C:\\Windows\\System32\\cmd.exe";
                    proc.StartInfo.RedirectStandardInput = true;
                    proc.StartInfo.UseShellExecute = false;
                    //démarage du processus		  
                    proc.Start();
                    //écriture sur l'entrée standard
                    proc.StandardInput.Write("sqlldr DSC/DSC@DSCDEV_GUZZI control=C:\\LOADER\\controle.ctl ROWS=10000 log=C:\\LOADER\\resultat.log data=C:\\LOADER\\GESTOR01012008.txt"); 
                    //fermeture de l'entrée standard
                    proc.StandardInput.Close();
                    //libération des ressources du processus
                    proc.Close();
    je devrais avoir aucun soucis, d'ailleurs j'en ai pas : tout s'éxécute bien mais au final il n'y a rien qui se passe !!!

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Affiche ta string cmd et compare là avec la requête que tu devrais envoyer.
    As tu fais ceci ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Pioufffff j'ai trouvé !!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    proc.StartInfo.Arguments = "/k sqlldr DSC/DSC@DSCDEV_GUZZI control="controle.ctl ROWS=10000 log="resultat.log data="GESTOR.txt";
    En fait j'ai enlevé les "application.StartupPath" car en fait a l'instal de mon application j'installe avec mes deux fichiers : .log et .ctl ou se trouve mon appli donc j'ai pas besoin de remettre une commande pour qu'il aille chercher le chemin de mon appli.
    De plus il faut un "/k" devant la ligne de commande pour que ca passe dans la cmd, pourquoi...j'en sais rien, je l'ai juste trouvé sur un forum !!!
    So happy
    En tout cas merci à tout le monde pour nous avoir aider !

  17. #17
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    cmd /k notpad -> lance notepad et laisse le cmd ouvert si tu fermes notepad.

    cmd /c notpad -> lance notepad et ferme le cmd ouvert si tu fermes notepad.

    Le comportement par défaut de cmd est de faire cmd /c.

    Donc le besoin du /k viens peut être du fait qu'autrement le cmd se ferme avant que toutes les opérations ne soient finis et cela gène.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  18. #18
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Merci pour ton explication
    Bonne continuation

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut
    Est ce que que vous pouvez mettre le code de la solution finale

    Merci

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

Discussions similaires

  1. lancer sql loader dans un programme java
    Par laurent.c123 dans le forum Général Java
    Réponses: 4
    Dernier message: 25/08/2010, 14h50
  2. Lancer un jar depuis mon programme
    Par jojodu31 dans le forum Langage
    Réponses: 5
    Dernier message: 02/07/2008, 15h49
  3. Connexion SQL*PLUS depuis un programme
    Par ttamttam dans le forum Connexions aux bases de données
    Réponses: 3
    Dernier message: 01/02/2008, 09h12
  4. [SQL*Loader] Depuis Procédure Stockée
    Par macben dans le forum Oracle
    Réponses: 4
    Dernier message: 22/03/2007, 17h23
  5. [Oracle 10] Appel SQL*Loader depuis Java
    Par ftrifiro dans le forum Oracle
    Réponses: 4
    Dernier message: 23/01/2007, 10h34

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