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 :

Récupérer le nom d'une procédure stockée depuis sa définition


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 369
    Par défaut Récupérer le nom d'une procédure stockée depuis sa définition
    Bonjour

    Je suis en train de développer un outil interne pour gérer des procédures stockées via SVN (j'avais trouvé une solution directement intégrée à SQL Server sur un article de Sql Server Central, mais il ne me convient pas, entre autre parce qu'il ne gère que Sql Server)

    Donc, je me crée une procédure en C# qui va lire l'ensemble des définitions depuis Sql Server, et qui les stocke dans des fichiers .sql, et ensuite j'essaie de gérer mes fichiers avec SVN (le projet étant tout frais de ce matin, je ne gère pas encore la partie SVN, surtout que je fais tout de tête sans specs)

    Bref, pour ceux qui ne le savent pas, lorsqu'on récupère les définitions des routines dans Sql Server (ce qui comprends procédures stockées et fonctions entre autres), on obtient un code Sql qui ressemble à ça

    Code sql : 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
     
     
     
    -- =============================================
    -- Author:		mioux
    -- Create date: Un jour
    -- Description:	Elle fais rien
    -- =============================================
    CREATE PROCEDURE [dbo].[nom_de_la_procedure]
               --On peux mettre des commentaires ici aussi
               @un_parametre INT,
               @un_autre_parametre VARCHAR(50)
    AS
    BEGIN
    	SELECT @un_parametre, @un_autre_parametre
     
    	CREATE TABLE #temp ( DATA VARCHAR(50) )
     
    	DECLARE @sql NVARCHAR (4000)
    	SET @sql = 'CREATE PROCEDURE une_autre_procedure AS BEGIN SELECT 1 END'
    END

    Mais bon, rien n'indique que la déclaration de la procédure se fait exactement comme ça

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE [dbo].[procedure]

    Ca peut très bien être

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE dbo
     
     
    .
     
     
     
              [une procédure à la noix] -- oui oui, avec des espaces et des accents

    ou

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE nom_de_la_procedure

    Je cherche à récupérer le nom de la procédure stockée... et intellectuellement, je ne vois pas comment faire.

    Sachant que le programme ne gère pas que les procédures stockées, mais, entre autres, aussi les fonctions, qui elles sont déclarées par

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE FUNCTION fonction
    avec les même règles que les procédures stockées pour le nom (donc avec une regex, on peut faire un (PROCEDURE|FUNCTION))

    Si quelqu'un a une idée, parce que là je sèche...

  2. #2
    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
    Il y a une méthode beaucoup plus simple pour récupérer les noms des procédures stockées, à l'aide de la méthode GetSchema de la connection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable procedures = connection.GetSchemas("Procedures");
    La DataTable contient (entre autres) les noms des procédures

  3. #3
    Membre éclairé Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 369
    Par défaut
    Oui mais non, là c'est un fichier que je veux réintégrer dans la base de données...

    J'ai un fichier qui contient la définition de la procédure. Avant de lancer son exécution, je veux vérifier que la procédure stockée n'existe pas avant, sinon "CREATE PROCEDURE" ne peut pas aboutir, il faut faire "ALTER PROCEDURE" à la place...

    C'est pour ça que je cherche le nom de la procédure, pour faire une recherche dans la base de données...

    (bon après, étant donné que je suis plus logique DBA que développeur, j'ai fais une liste des procédures stockées en passant par le schéma INFORMATION_SCHEMA, mais passons)

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Tu ne peux pas supprimer et recréer ta procédure si elle existe déjà dans ton code de procédure ?

  5. #5
    Membre éclairé Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 369
    Par défaut
    oui mais ca change pas qu'il me faut quand même son nom

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    regex
    puis lui dire que tu veux ce qui est entre "create" et soit @ soit AS
    puis vérifier s'il y a un . et des [
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/01/2008, 18h01
  2. Réponses: 2
    Dernier message: 01/03/2007, 14h46
  3. Récupérer le résultat d'une procédure stockée
    Par DanZzz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/11/2006, 22h08
  4. Créer une procédure stockée depuis Delphi
    Par blonde dans le forum Bases de données
    Réponses: 10
    Dernier message: 10/03/2006, 11h26
  5. [C#] Récupérer le résultat d'une procédure stockée
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/10/2004, 13h45

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