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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 ?

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