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

Silverlight Discussion :

Executer une procédure stockée sans return


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut Executer une procédure stockée sans return
    Bonjour,

    Dans ma base de données, j'ai créé une procédure stockée qui ne retourne pas de données. Tout ce qu'elle fait c'est des inserts dans 3 ou 4 tables.


    Tout ce que je trouve sur les forums est de mapper la procédure à une entité, (que je dois créer), qui représente le résultat de la procédure. Mais puisque la mienne n'a pas de retour, comment puis-je la lancer depuis mon appli SL?



    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Tu dois utiliser le tag [Invoke] avant ta procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      [Invoke()]
            public boolean taProcedure()
    {....}
            {
    Je retourne ici un boolean qui est vrai si j'ai pas eu d'erreurs, faux autrement.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Bonjour Golzinne, et merci pour ta réponse,

    Je le mets où le Invoke? J'arrive pas à trouver ma procédure dans mon DomainService. Le seul endroit ou je la voie c'est dans l'EDMX (plutôt l'XML de l'EDMX)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Bon voici un exemple de code que j'utilise pour aller ajouter une prestation coté serveur dans une table SqlServer.

    C'est donc une fonction qui me retourne non pas une entité mais un string qui est soit vide si tout s'est bien passé coté serveur, soit le message d'erreur.

    Coté client je fais:

    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
     
     
    private J_Context _ctx = new J_Context(); // ça c'est mon domaineService
     
    // et puis
     protected void JCreate()
            {
     
                InvokeOperation<string> iopAdd = _ctx.AddPrestation(_prestation);
                iopAdd.Completed += new System.EventHandler(iopAdd_Completed);
            }
     
    void iopAdd_Completed(object sender, System.EventArgs e)
            {
                InvokeOperation<string> iop = sender as InvokeOperation<string>;
                string ret = iop.Value;
     
                if (!(ret == ""))
                { MessageBox.Show(ret); }
                else
                { MessageBox.Show("Prestation créée");  }
            }

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Et pour répondre à ta question de savoir ou tu mets ton Invoke, c'est dans ton DomainService

    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
      [Invoke()]
            public string AddPrestation(PrestationTbl myPrestation)
            {
                try
                {
                   .......
                    this.ObjectContext.SaveChanges();
                    return "";
     
                }
                catch (Exception e)
                {
                    Exception aaa = e;
     
                    if (e.InnerException.Message.Contains("with unique index 'unique_nom'"))
                    {
                        return "le nom de cette prestation existe déjà";
                    }
                    else
                    {
     
                        return e.InnerException.Message;
     
                    }
     
                }
            }

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Merci encore une fois, là au moins j'arrive à atteindre ma méthode et ainsi ma Stored Procedure.

    Une dernière question : Tu es sûr qu'en appelant ma méthode, la procédure se lance du coté BdD et non pas du coté du model EDMX?

    Merci!

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Oui

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Ca marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DbCommand procSto = this.Context.Connection.CreateCommand();
    procSto.CommandText = "[NomContainer].[MaProcSto]";
    procSto.CommandType = CommandType.StoredProcedure;
     
    DbParameter parm = procSto.CreateParameter();
    parm.ParameterName = "id";
    parm.Value = 1;
    parm.DbType = DbType.Int64;
    procSto.Parameters.Add(parm);
     
    procSto.ExecuteScalar();
    je reçois le message d'erreur suivant :
    "Le conteneur «*[NomContainer]*» spécifié pour FunctionImport est introuvable dans l'espace de travail actuel."
    StackTrace :
    StackTrace = "à
    System.Web.DomainServices.ReflectionDomainServiceDescriptionProvider.ReflectionDomainOperationEntry.Invoke(Object target, Object[] parameters)
    à System.Web.DomainServices.DomainService.Invoke(DomainOperationEntry serviceOperation, Object[] param...
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procSto.CommandText = @"[NomContainer].[MaProcSto]";
    // Mais ça marche toujours pas
    procSto.CommandText = "NomContainer.MaProcSto";
    //Toujours pas
    procSto.CommandText = "MaProcSto";
    Et ça marche toujours pas!

    Vous auriez une idée?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Mmmmhh,

    Moi j'utilise Ria Services et ADO.NET Entity Data Model.

    Visiblement toi pas...

    En plus, j'utilise pas de storeProc dans cet environnement, sinon, ceci pourra peut-être t'aider:

    http://forums.silverlight.net/p/146613/326427.aspx

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Si si, moi aussi j'utilise Ria Services et ADO.NET Entity Data Model.

    Dans mon EDMX j'ai importé 3 tables (entre autres) et une procédure stockée qui prend quelques paramêtres et fait des insert sur les 3 tables dans l'ordre. (j'aurai pu le faire plus simplement, mais je récupère l'id au premier insert pour le mettre dans le deuxième, et pareil pour le le troisième insert. En plus je veux réduire le nombre d'appel à la base de données. Ainsi je balance les param à ma precédure stockée et elle se charge de les dispatcher sur les 3 tables.)

    Dans ma BD, ma ProcSto s'appelle [NomContainer].[NOM_PROCEDURE].
    Mais quand j'exécute la DcCommand, il me dit qu'il trouve pas [NomContainer]!!

    Any ideas?

    Merci et bonne soirée!

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Bon, je sais pas si ça pourrait vous aider à m'aider, mais j'ai trouvé la source de mon problème : C'est le container de ma procedure stockée que mon programme n'arrive pas à trouver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     à System.Data.Common.Utils.CommandHelper.FindFunctionImport(MetadataWorkspace workspace, String containerName, String functionImportName)
       à System.Data.EntityClient.EntityCommand.DetermineFunctionImport()
       à System.Data.EntityClient.EntityCommand.MakeCommandTree()
       à System.Data.EntityClient.EntityCommand.CreateCommandDefinition()
       à System.Data.EntityClient.EntityCommand.TryGetEntityCommandDefinitionFromQueryCache(EntityCommandDefinition& entityCommandDefinition)
       à System.Data.EntityClient.EntityCommand.GetCommandDefinition()
       à System.Data.EntityClient.EntityCommand.InnerPrepare()
       à System.Data.EntityClient.EntityCommand.Prepare()
       à System.Data.EntityClient.EntityCommand.ExecuteReader(CommandBehavior behavior)
       à System.Data.EntityClient.EntityCommand.ExecuteScalar[T_Result](Func`2 resultSelector)
       à System.Data.EntityClient.EntityCommand.ExecuteNonQuery()

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Par défaut
    Bon,

    J'ai trouvé une solution : Bon courage pour l'implémenter . J'ai mis deux jours à le faire, et il me reste plus que quelques problèmes de Cast pour en finir.

    Dites moi si vous y arrivez (même si apparemment vous êtes pas nombreux à avoir à implémenter ce genre de solution)

    Lien :

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/05/2013, 14h29
  2. [CR9 Oracle] Executer une procédure stockée depuis un rapport
    Par zodeno dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 26/03/2008, 14h39
  3. executée une procédure stockée depuis access 97
    Par sandmil dans le forum Access
    Réponses: 1
    Dernier message: 12/07/2007, 11h51
  4. [Oracle] Exécuter une procédure stockée sans en attendre le résultat
    Par glutock dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/02/2007, 13h54
  5. Executer une procédure stockée à distance
    Par vvvvv dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/11/2006, 16h12

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