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 :

appel de procédure stockée oracle en CSharp


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut appel de procédure stockée oracle en CSharp
    Bonjour,

    Je développe une application qui utilise des grilles..J'ajoute une nouvelle ligne a la grille, je remplis les champs puis j'appelle une procédure oracle qui contient un paramètre out. J'utilise ADO.NET

    Et voici la procédure :

    procedure p_cre_execu(pc_proje in varchar2,
    pc_tra_id in varchar2,
    pc_envir in varchar2 := null,
    pc_statu in varchar2 := null,
    pd_date_soumi in date := null,
    pd_date_deman in date := null,
    pc_param in varchar2 := null,
    pc_cle_uniqu_execu in varchar2 := null,
    pc_prior in number := null,
    pc_queue in varchar2 := null,
    pc_descr_execu in varchar2 := null,
    pc_val_param_xml in varchar2 := null,
    pn_exe_no out number);

    Comme vous voyez, cette procédure retourne un number.

    Dans mon tableAdapter, j'ai ajouté la procédure stockée et je l'ai nommé "InsererRequeteExecution".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public int CreerRequeteTravail(string projet,string identifiantChaine, string envir, string statut,DateTime dateSoum,DateTime dateDemande,...,out int numeroExecution)
    {
     
     using (XAI_EXECUTION_V_TRAVAILTableAdapter tableAdapter = new XAI_EXECUTION_V_TRAVAILTableAdapter())
    {
    	tableAdapter.Connection = _connexion.OracleConnexion;
    	 Object numero = tableAdapter.InsererRequeteExecution(projet,
    	                                                identifiantChaine,
    	                                               envir, ..., out numeroExecution);
     
          return Convert.ToInt32(numero);
    }
    }
    Sauf que ça me génère deux erreures :
    - La méthode surchargé (InsererRequeteExecution) possède des arguments non valides
    - impossible de convertir 'out int' en 'out int'.

    Est ce que vous pourriez m'aider??

    Merci d'avance

  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
    Citation Envoyé par nidhou Voir le message
    - impossible de convertir 'out int' en 'out int'.

    euh... t'es sûr ? erreur de copier-coller peut-être ?

    Sinon, vu qu'on ne connait pas la définition de la méthode InsererRequeteExecution, c'est difficile de voir ce qui ne va pas... C'est une méthode générée automatiquement dans le designer de dataset je suppose ?
    Tu peux montrer le code généré ?

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    voici le code générée automatiquement

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
     
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
            public virtual object InsererRequeteExecution(string PC_PROJE, string PC_TRA_ID, string PC_ENVIR, string PC_STATU, global::System.Nullable<global::System.DateTime> PD_DATE_SOUMI, global::System.Nullable<global::System.DateTime> PD_DATE_DEMAN, string PC_PARAM, string PC_CLE_UNIQU_EXECU, global::System.Nullable<int> PC_PRIOR, string PC_QUEUE, string PC_DESCR_EXECU, string PC_VAL_PARAM_XML, out global::System.Nullable<int> PN_EXE_NO) {
                global::Oracle.DataAccess.Client.OracleCommand command = this.CommandCollection[1];
                if ((PC_PROJE == null)) {
                    command.Parameters[0].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[0].Value = ((string)(PC_PROJE));
                }
                if ((PC_TRA_ID == null)) {
                    command.Parameters[1].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[1].Value = ((string)(PC_TRA_ID));
                }
                if ((PC_ENVIR == null)) {
                    command.Parameters[2].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[2].Value = ((string)(PC_ENVIR));
                }
                if ((PC_STATU == null)) {
                    command.Parameters[3].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[3].Value = ((string)(PC_STATU));
                }
                if ((PD_DATE_SOUMI.HasValue == true)) {
                    command.Parameters[4].Value = ((System.DateTime)(PD_DATE_SOUMI.Value));
                }
                else {
                    command.Parameters[4].Value = global::System.DBNull.Value;
                }
                if ((PD_DATE_DEMAN.HasValue == true)) {
                    command.Parameters[5].Value = ((System.DateTime)(PD_DATE_DEMAN.Value));
                }
                else {
                    command.Parameters[5].Value = global::System.DBNull.Value;
                }
                if ((PC_PARAM == null)) {
                    command.Parameters[6].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[6].Value = ((string)(PC_PARAM));
                }
                if ((PC_CLE_UNIQU_EXECU == null)) {
                    command.Parameters[7].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[7].Value = ((string)(PC_CLE_UNIQU_EXECU));
                }
                if ((PC_PRIOR.HasValue == true)) {
                    command.Parameters[8].Value = ((int)(PC_PRIOR.Value));
                }
                else {
                    command.Parameters[8].Value = global::System.DBNull.Value;
                }
                if ((PC_QUEUE == null)) {
                    command.Parameters[9].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[9].Value = ((string)(PC_QUEUE));
                }
                if ((PC_DESCR_EXECU == null)) {
                    command.Parameters[10].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[10].Value = ((string)(PC_DESCR_EXECU));
                }
                if ((PC_VAL_PARAM_XML == null)) {
                    command.Parameters[11].Value = global::System.DBNull.Value;
                }
                else {
                    command.Parameters[11].Value = ((string)(PC_VAL_PARAM_XML));
                }
                global::System.Data.ConnectionState previousConnectionState = command.Connection.State;
                if (((command.Connection.State & global::System.Data.ConnectionState.Open) 
                            != global::System.Data.ConnectionState.Open)) {
                    command.Connection.Open();
                }
                object returnValue;
                try {
                    returnValue = command.ExecuteScalar();
                }
                finally {
                    if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
                        command.Connection.Close();
                    }
                }
                if (((command.Parameters[12].Value == null) 
                            || (command.Parameters[12].Value.GetType() == typeof(global::System.DBNull)))) {
                    PN_EXE_NO = new global::System.Nullable<int>();
                }
                else {
                    PN_EXE_NO = new global::System.Nullable<int>(((int)(command.Parameters[12].Value)));
                }
                if (((returnValue == null) 
                            || (returnValue.GetType() == typeof(global::System.DBNull)))) {
                    return null;
                }
                else {
                    return ((object)(returnValue));
                }
            }

  4. #4
    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
    le dernier paramètre peut être null, c'est un Nullable<int> (qu'on peut aussi écrire "int?") et non un int

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    Merci, j'ai réussi a faire compiler la méthode. sauf que j'ai de la misère à la faire fonctionner correctement. Présentement la me permet de créer l'enregistrement dans la BD oracle mais j'arrive pas a récupérer le parametre out.

    En fait dans ma forme je fais appel à la méthode CreerExecution de la classe classe Processus915.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    // Numéro de la requête d'ésécution
    int? numero;
    int numeroExe = _processus915.CreerExecution("EPE", "5001", "FCT", null, DateTime.Today, DateTime.Today, "SeuilTolerancePlani=50|No_transaction=1", null, 	7,"Q4",null,null, out numero);
    Voici la méthode de la classe Processus915

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public int CreerExecution(string projet, string identifiantChaine,string envir, string statut, DateTime dateSoumission, DateTime dateDemande, string parametres, string cle, int priorite, string queue, string desc, string paramXML, out int ? numeroExecution)
    {
     
     return _servicesXAI.CreerRequeteTravail(projet, identifiantChaine, 
    				envir, statut, dateSoumission, 
    				dateDemande, parametres, cle, 
    				priorite, queue, desc, paramXML,
    			out numeroExecution);
    }
    Cette méthode appelle la méthode CreerRequeteTravail de la classe ServicesXAI et voici le code qui a été corrigé par les premiers messages et voici son code :

    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
     
     
    public int CreerRequeteTravail(string projet,
    													string identifiantChaine,
    													string envir,
    													string statut,
    													DateTime dateSoumission,
    													DateTime dateDemande,
    													string parametres,
    													string cle,
    													int priorite,
    													string queue,
    													string desc,
    													string paramXML,
    													out int ? numeroExecution)
    		{
    			Journal.JournaliserMethode(GetType().Name, System.Reflection.MethodBase.GetCurrentMethod().Name);
     
    			using (XAI_EXECUTION_V_TRAVAILTableAdapter tableAdapter = new XAI_EXECUTION_V_TRAVAILTableAdapter())
    {
    tableAdapter.Connection = _connexion.OracleConnexion;
    Object numero = tableAdapter.InsererRequeteExecution(projet, identifiantChaine,envir, statut,dateSoumission,dateDemande, parametres,cle,priorite,queue, desc, paramXML,out numeroExecution);
     
    return Convert.ToInt32(numero);
    }
    }
    L'erreur générée est "Le cast spécifié n'est pas valide."

    Aviez vous une idée??

    Merci infiniment

  6. #6
    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
    Citation Envoyé par nidhou Voir le message
    L'erreur générée est "Le cast spécifié n'est pas valide."
    Sur quelle instruction cette erreur se produit ?

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    sur : Object numero = tableAdapter.InsererRequeteExecution(projet,
    identifiantChaine, envir,
    statut,
    dateSoumission,
    dateDemande,
    parametres,
    cle,
    priorite,
    queue, desc, paramXML,
    out numeroExecution);

  8. #8
    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
    Ca me semble bizarre, vu qu'il n'y a aucun cast dans cette instruction... c'est pas plutôt sur le Convert.ToInt32 ?

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 25
    Par défaut
    non ce n'est pas sur le convert

  10. #10
    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
    En fait, ça me semble bizarre que le dernier paramètre soit considéré comme un int... dans la procédure stockée, il est déclaré comme number, et un number n'est pas forcément entier... Il faudrait plutôt déclarer ce paramètre comme un decimal (ou plutot Nullable<decimal>)

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/11/2014, 09h45
  2. Réponses: 2
    Dernier message: 11/02/2011, 09h34
  3. [PB 11.5.1] Appel procédure stockée Oracle 10g
    Par paperjam dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 31/05/2010, 09h58
  4. Réponses: 4
    Dernier message: 24/10/2008, 15h07
  5. Appel de procédure stockée Oracle
    Par olive-andre dans le forum C#
    Réponses: 5
    Dernier message: 17/12/2007, 12h59

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