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

Windows Presentation Foundation Discussion :

[Débutant] Fichier contenant un script SQL à exécuter


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut [Débutant] Fichier contenant un script SQL à exécuter
    Bonjour

    Je suis débutant en .NET et je veux faire une application C#.NET qui me permet d'exécuter des commandes SQL partir d'un fichier.
    J'aimerais faire un popup qui permet à l'utilisateur de loader un .sql (À l'exemple du popup permettant de chercher une pièce jointe lors de la composition d'un mail)

    Est ce que le Framework .NET offre cette fonctionnalité (fenêtre de recherche de fichier) pour bien je dois tous coder par moi même ?

    Une fois le fichier loader comment faire pour l'interpréter ? ya til quelque chose de déjà fait par l'équipe Microsoft ?

    Merci d'avance Votre aide m'éviterait probablement de réinventer la roue

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Par défaut
    Salut,

    Tu peux utiliser la classe OpenFileDialog qui te permet de gérer toute la partie sélection de fichier.

    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx


    Cdt,
    Spaeda

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    Pour interpréter le fichier, il suffit de le lire via la classe System.IO.StreamReader.

    Utilises la fonction ReadToEnd pour stocker le contenu du fichier dans une variable de type string ou autre chose.Attention aux gros fichiers.

    Ensuite ben à toi de faire ce que tu veux de ces requêtes SQL ... Ca dépends de la base de donnée cible, donc soit Oledb, Odbc, SQLclient etc ...

  4. #4
    Membre confirmé Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    Merci infiniment pour votre précieuse aide

    Pour commencer je vais modéliser le file dialog pour y pavenir je suis le conseille de Sapeda

    Citation Envoyé par Spaeda Voir le message
    Salut,
    Tu peux utiliser la classe OpenFileDialog qui te permet de gérer toute la partie sélection de fichier.
    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx
    En mettant le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using System.IO;
    using System.Text; 
    using System.Windows.Forms;
    ...
    private string SelectTextFile ( string initialDirectory ) { 
       OpenFileDialog dialog = new OpenFileDialog(); 
       dialog.Filter = 
          "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
       dialog.InitialDirectory = initialDirectory; 
       dialog.Title = "Select a text file"; 
       return ( dialog.ShowDialog() == DialogResult.OK )       ? dialog.FileName : null;
    }

    Mon soucis est le suivant

    Cette fenêtre va être lancer depuis un menu contextuel si j'ajoute le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Windows.Forms;
    Je vais avoir l'erreur suivante
    'UserControl' est une référence ambiguë entre 'System.Windows.Controls.UserControl' et 'System.Windows.Forms.UserControl'
    J'essaye de contourner l'erreur en mettant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      System.Windows.Controls.ContextMenu UserContextMenu = this.FindResource("ContextMenu")  as System.Windows.Controls.ContextMenu;
    Ça ne ne règle qu'une partie du problème puisque ma classe hérite de UserControl

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 77
    Par défaut
    Citation Envoyé par Chakalaka Voir le message
    Merci infiniment pour votre précieuse aide

    Pour commencer je vais modéliser le file dialog pour y pavenir je suis le conseille de Sapeda



    En mettant le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using System.IO;
    using System.Text; 
    using System.Windows.Forms;
    ...
    private string SelectTextFile ( string initialDirectory ) { 
       OpenFileDialog dialog = new OpenFileDialog(); 
       dialog.Filter = 
          "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
       dialog.InitialDirectory = initialDirectory; 
       dialog.Title = "Select a text file"; 
       return ( dialog.ShowDialog() == DialogResult.OK )       ? dialog.FileName : null;
    }

    Mon soucis est le suivant

    Cette fenêtre va être lancer depuis un menu contextuel si j'ajoute le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Windows.Forms;
    Je vais avoir l'erreur suivante
    J'essaye de contourner l'erreur en mettant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      System.Windows.Controls.ContextMenu UserContextMenu = this.FindResource("ContextMenu")  as System.Windows.Controls.ContextMenu;
    Ça ne ne règle qu'une partie du problème puisque ma classe hérite de UserControl
    C'est simple, au lieu de passer par Using, tu fait directement référence aux namespace dans ton code. par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private string SelectTextFile ( string initialDirectory ) { 
      system.windows.forms.OpenFileDialog dialog = new system.windows.forms.OpenFileDialog(); 
       dialog.Filter = 
          "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
       dialog.InitialDirectory = initialDirectory; 
       dialog.Title = "Select a text file"; 
       return ( dialog.ShowDialog() == system.windows.forms.DialogResult.OK )       ? dialog.FileName : null;
    }

  6. #6
    Membre confirmé Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    Citation Envoyé par Pyroa Voir le message
    C'est simple, au lieu de passer par Using, tu fait directement référence aux namespace dans ton code. par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private string SelectTextFile ( string initialDirectory ) { 
      system.windows.forms.OpenFileDialog dialog = new system.windows.forms.OpenFileDialog(); 
       dialog.Filter = 
          "txt files (*.txt)|*.txt|All files (*.*)|*.*"; 
       dialog.InitialDirectory = initialDirectory; 
       dialog.Title = "Select a text file"; 
       return ( dialog.ShowDialog() == system.windows.forms.DialogResult.OK )       ? dialog.FileName : null;
    }
    Merci pour l'intérêt que tu portes à mon problème
    J'ai déjà pensé à cette méthode mais je n'arrive pas à faire le new du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Forms.OpenFileDialog dialog = System.Windows.Forms.OpenFileDialog();
    Puisqu'il considère OpenFileDialog comme un type est pas une fonction
    'System.Windows.Forms.OpenFileDialog' est un 'type', qui n'est pas valide dans le contexte donné

  7. #7
    Membre confirmé Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    On arrive à la partie la plus sérieuse de tous

    Citation Envoyé par Pyroa Voir le message
    Utilises la fonction ReadToEnd pour stocker le contenu du fichier dans une variable de type string ou autre chose.Attention aux gros fichiers.
    ...
    Le try-catch suffit pour prévenir ce genre de problème ou bien il faut un traitement particulier ?

    Citation Envoyé par Pyroa Voir le message
    Ensuite ben à toi de faire ce que tu veux de ces requêtes SQL ... Ca dépends de la base de donnée cible, donc soit Oledb, Odbc, SQLclient etc ...
    Je n'ai pas compris cette partie
    Je veux lire un script SQL à partir d'un fichier chargé préalablement afin de l'exécuter (J'ai une base SQL hébergé par SQL server 2008 et je développe mon application sous VS2008)

    Voici le code que j'ai actuellement, en gros

    • Ça lance une fileDialog qui permet à l'utilisateur de chercher le fichier à charger
    • Lit le contenu du fichier

    Code c# : 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
     
    Stream myStream;
     
    System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog();
    dialog.InitialDirectory = "C://";
    dialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    dialog.FilterIndex = 2;
    dialog.CheckFileExists = true;
     
    if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        if ((myStream = dialog.OpenFile()) != null)
        { 
            // m'affiche le bon chemin
            System.Windows.MessageBox.Show(dialog.FileName.ToString()); 
            System.IO.StreamReader sr = new System.IO.StreamReader(dialog.FileName); 
            // Affiche le contenu du fichier
            System.Windows.MessageBox.Show(sr.ReadToEnd()); myStream.Close();
        }   
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 150
    Par défaut
    Le try catch va effectivement éviter un éventuel problème. Cependant, il est toujours judicieux de faire en sorte de réduire au maximum les possibilité d'exception car un catch est très couteux niveaux performance.

    En ce qui concerne les dires de Pyroa:
    Les "providers" cité dépendent de la base de données cible. En gros, ils permettent de te connecter a la base de données et d'exécuter des script SQL.

    Dans ton cas, tu es sous SQL Server 2008 donc le framework le gère nativement. Mais je ne me rappel plus de l'espace de nom (trop habitué à Linq )

    Tu pourras trouver pas mal de tuto sur le site concernant l'utilisation des bases de données en C#.

  9. #9
    Membre confirmé Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Par défaut
    Citation Envoyé par Spaeda Voir le message
    Tu pourras trouver pas mal de tuto sur le site concernant l'utilisation des bases de données en C#.
    J'y travaille actuellement merci

    Citation Envoyé par Spaeda Voir le message
    Le try catch va effectivement éviter un éventuel problème. Cependant, il est toujours judicieux de faire en sorte de réduire au maximum les possibilité d'exception car un catch est très couteux niveaux performance.
    .
    Pourrais tu développer plus cette partie, si j'ai bien compris il faut faire attention aux fichiers volumineux lors du chargement. Comment réduire au max la possibilités d'exception sans altérer la performance?

    Merci guys vous me faites apprendre tellement de choses

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2011, 15h47
  2. exécuter un fichier de script SQL (. Sql) sur VB.NET
    Par sihammaster dans le forum VB.NET
    Réponses: 1
    Dernier message: 14/04/2010, 16h22
  3. Script pour exécuter un fichier .sql
    Par jeanjean0403 dans le forum SQL
    Réponses: 7
    Dernier message: 04/10/2007, 22h55
  4. Script sql à exécuter chaque jour
    Par zut94 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 29/08/2006, 18h58
  5. [MySQL] execution fichier contenant de requete sql
    Par DarkMax dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 03/10/2005, 18h28

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