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#

  1. #1
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    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
    Points : 39 753
    Points
    39 753
    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 habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    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 Expert

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    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 habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    oui mais ca change pas qu'il me faut quand même son nom

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    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 [

  7. #7
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    Ah oui tiens c'est une bonne idée je vais chercher dans ce sens

  8. #8
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    Bon, j'ai commencé à faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string definition = base.GetDefinition(fileName);
    string spName = definition;
     
    Regex fComs = new Regex(@"(/\*([^*]|(\*+[^*/]))*\*+/)|(--.*)", RegexOptions.RightToLeft);
     
    while (fComs.IsMatch(definition))
        spName = fComs.Replace(spName, string.Empty);
     
    Regex fBegin = new Regex(@"\sAS\s", RegexOptions.IgnoreCase);
     
    if (!fBegin.IsMatch(definition))
        throw new Exception("Erreur de syntaxe dans la définition de la routine");
     
    spName = fBegin.Split(spName)[0];
    base.GetDefinition(fileName) permet de récupérer le contenu de la procédure stockée depuis le fichier (c'est un simple File.ReadAllText(fileName), mais dans mon optique c'est logique )

    la regex fComs (pour find comments) trouve tous les /* */ et les -- qui définissent les commentaires. L'option RightToLeft est là pour gérer les commentaires /* commentaire /* suite */ et fin */ qui est valide (je l'ai honteusement volée ici)

    Je supprime tous les commentaires de ma définition (pour éviter d'en avoir qui pourrissent ma recherche future.

    Ensuite, comme je n'arrive pas à faire de regex non gourmande sur plusieurs caractère (ah faire un truc qui capture [blablabla] sans ] dans le blablabla, ça va, mais faire un truc qui capture
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE nom AS
    dans
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE nom AS BEGIN SELECT 1 AS X END
    y a plus personne ), je splite sur (après avoir contrôlé qu'il y en a un, si il n'y en a pas, le fichier n'est de toute façons pas valide), et je récupère le premier élément, donc, par exemple un truc du genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE dbo.nom

    Plus qu'à rajouter les regex qui vont me permettre d'extraire le nom à partir de ça

  9. #9
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    Bon de toute façons, ça colle pas, je vais devoir faire autrement...

    J'avais un poil zappé que si la procédure "a" a été renommée rn "b", ma définition contient
    et non

    EDIT : En fait si, j'y reviens, parce que du coup, je dois remplacer le "CREATE PROCEDURE schema.nom" par ceux que j'ai enregistré séparément.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    tu peux réexpliquer la problématique de départ ? car il y a peut etre d'autres solutions à ton problème

    par exemple avec un trigger ddl on peut enregistrer toutes les créations/modifications/deletations de SP et on choppe le nom et le code au passage, donc possible de l'enregistrer quelque part

  11. #11
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    La problématique :

    Beaucoup d'applications ont un nombre important de procédure stockées. Plutôt que d'avoir "a", puis "a_old", "a_old2" etc etc (qui ne servent à rien dans 99% des cas en plus), on voudrait stocker nos définition de table/vues/ procédures stockées/fonctions/whatever (on se limitera à ces 4 là pour le moment ) sur un serveur Subversion (en parallèle du projet associé), afin d'assurer un historique de version.

    Il est bien entendu hors de question de stocker tout ça sur le serveur de base de données (tel que c'est fait actuellement), de plus on ne gère pas d'historique de structure des tables.

    On a donc une pléthore de procédure stockées qui ne sont plus valables (car elles ont étés renommées pour sauvegarde, et les structures ont changé entre temps) ou plus d'actualité (car remplacées par d'autres)

    Le but est d'extraire toutes ces définitions de la base de données, stocker le tout dans des fichiers, et balancer sur le serveur SVN.

    Et voilà l'idée que j'ai :
    Grâce à C# et à la bibliothèque SharpSvn, je veux extraire les définitions des objets et contrôler le SVN depuis un programme (histoire d'en avoir le moins à faire plus tard, c'est feignant un développeur/DBA (et encore pire un développeur DBA comme moi (oui je fais les 2 tout le temps)))

    L'extraction des définitions d'objets ne pose pas de problème

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT OBJECT_DEFINITION(OBJECT_ID(@objectName))
    me renvoie la définition d'un objet au dernier CREATE ou ALTER

    Seulement si on la renomme (via sp_rename) sans l'altérer par la suite, la définition de l'objet ne change pas (ca serait trop beau) ou si on essaie de remonter une procédure existante (lors d'un update du SVN par exemple), il faut penser à altérer (ou supprimer) l'existant, mais seulement dans le cas où la procédure existe.

    Donc, je souhaite remplacer
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE type schema.nom [@arguments facultatifs] AS
    par
    Code code : Sélectionner tout - Visualiser dans une fenêtre à part
    __SVN__ACTION__ type schema_reel.nom_reel [@arguments facultatifs] AS
    avec toutes les contraintes que m'imposent Sql Server bien évidemment, c'est à dire

    - Garder les éventuels commentaires qui se seraient glissés dans la définition entre le CREATE et le premier AS significatif
    - gérer les nom entre crochets (si jamais on a une procédure qui s'appelle [AS] ou avec un espace, un point ou des accents... ce n'est pas le cas chez nous, mais peut être que d'autres auront ce problème)
    - éventuellement supprimer les espaces non significatifs lors de l'export de la définition (Entre le premier CREATE significatif et le premier AS significatif bien entendu, dans le reste on touche pas)

    Ce que j'appelle significatif, c'est qu'il a un sens pour Sql Server
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -- AS non significatif
    /* AS non significatif */
    'AS non significatif... 
    RHAAA j''avais pas pensé à celui là dans une valeur par défaut' 
    CREATE PROCEDURE [AS] AS /* significatif */
        SELECT 1 AS /* significatif */ X

    Et il est hors de question d'utiliser des triggers (c'est une philosophie dans la boite)

    Voici mon cauchemard
    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
    -- Ce CREATE va créer la procédure stockée
    /* qui risque me poser le plus de problème
    et de retournement de cerveau */
     
    CREATE PROCEDURE /* ou peut être une fonction serait mieux */
     
    dbo
     
     
       .    [un as de @pique] -- coucou
    @as VARCHAR = 'Ceci est un AS de pique'
    AS
    BEGIN
        SELECT @as AS RETOUR
    END
    GO
     
    EXEC sp_rename 'un as de @pique', 'un as de @coeur'
    GO

    J'ai le nom réel stocké à part. Lors de la lecture de la définition de cette procédure :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT OBJECT_DEFINITION(OBJECT_ID('un as de @coeur'))
    je vais recevoir
    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
    -- Ce CREATE va créer la procédure stockée
    /* qui risque me poser le plus de problème
    et de retournement de cerveau */
     
    CREATE PROCEDURE /* ou peut être fonction */
     
    dbo
     
     
       .    [un as de @pique] -- coucou
    @as VARCHAR = 'Ceci est un AS de pique'
    AS
    BEGIN
        SELECT @as AS RETOUR
    END
    Lors de la réinsertion dans la BDD, c'est au programme de se rendre compte que non, la procédure ne s'appelle plus "un as de @pique" mais "un as de @coeur", et que, comme elle existe déjà, je dois faire un "ALTER PROCEDURE", et non pas un "CREATE PROCEDURE"

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    et le but final c'est quoi ?? savoir qu'à telle date tu avais telle version de la base ?
    parce que dans ce cas tu fais un backup de base par date ...

  13. #13
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    Euh non, des backup de 200Go ca va pas le faire

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    si c'est juste la structure ca va prendre 10Mo

    jette un oeil sur smo, ca pourrait surement t'aider

  15. #15
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    même 10Mo pour moins d'1Mo de procédure, c'est pas rentable

    Sans compter qu'au final, l'outil ne se destine pas que à SQL Server mais aussi à MySQL et à SQLite (entre autres)

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Bonjour
    Je viens de lire le sujet en diagonal, et une chose saute aux yeux : pour faire ça, le plus simple est d''utiliser les objets SMO (NS :
    Microsoft.SqlServer.Management.Smo).

    Ici, récupérer un objet serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Server server = new Server(_serverName);
    Puis la base de données en question

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _dataBase = server.Databases[_dataBaseName];
    Puis récupérer les objets StoredProcedure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    foreach (StoredProcedure storeProcedure in _dataBase.StoredProcedures)
    {
    //.... ma cuisine avec les SP
    }

  17. #17
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    Lire les procédures depuis la base, pas de problème

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT  ROUTINE_NAME
    FROM    INFORMATION_SCHEMA.ROUTINES

    puis

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT OBJECT_DEFINITION(OBJECT_ID(@spName))

    Là j'obtiens le code de la procédure

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

    Puis enregistré dans un fichier, direction SVN.
    ----
    Dans l'autre sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string definition = File.ReadAllText("spname.sql")
    Je pourrais exécuter le code tel quel si j'étais certain que la procédure n'existe pas au préalable. Il faut donc que je sois capable de capturer le nom et le schéma depuis ce CREATE.

    Pour le moment et pour me simplifier la vie, j'ai décidé de prendre
    Code regex : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE\s+\w+\s+([^\s]+)
    , mais cette capture n'est valable que si le schéma et le nom de la procédure sont correctement collés à la création.

    Si on crée une procédure
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE PROCEDURE [nom du schema] . [nom de la procédure]
    alors je me retrouve coincé pour connaitre le nom de la procédure que je tente de réinjecter

    Toutefois, je regarderais ce que je peux faire avec l'objet Smo (bien qu'il me semble qu'il faut Sql Server installé sur la machine, ce qui ne sera pas forcément le cas sur la machine de la personne qui fais les versionning)

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    pas besoin d'installer sql server pour utiliser smo
    tu prends les quelques dll nécessaires et tu les mets à coté de ton exe (c'est codé en .net)

  19. #19
    Membre habitué Avatar de mioux
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2005
    Messages
    367
    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 : 367
    Points : 191
    Points
    191
    Par défaut
    Question légale, je pense pas avoir le droit de les diffuser

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    je pense qu'il y a pas de soucis ... smo est téléchargeable gratuitement

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/01/2008, 19h01
  2. Réponses: 2
    Dernier message: 01/03/2007, 15h46
  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, 23h08
  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, 12h26
  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, 14h45

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