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 :

recuperer la valeur de retoure procedure stockée c#


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Par défaut recuperer la valeur de retoure procedure stockée c#
    Bonjour
    j'essaye de récupérer le valeur de retour d'une procédure stockée avec C#. Mais j'ai des erreurs que je comprends pas. voila mon 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
            public void ExecProcedure(string tableName, string prefixe)
            {
                //Intialisation du parametere de la connxion
                OracleConnection con = new OracleConnection(this._connectionString);
                OracleCommand commandeProc = con.CreateCommand();
                commandeProc.CommandType = CommandType.StoredProcedure;
                OracleParameter param;
                OracleTransaction tran = null;
                try
                {
                    con.Open();
                    tran = con.BeginTransaction();
                    commandeProc.Transaction = tran;
                    commandeProc.CommandText = "mim.MIM_RETOURNE_CODESUIVANT";
                    // Création des paramètres en entrée
                    //Nom de la tabele string
                    param = new OracleParameter();
                    param.ParameterName = "LeNomTable";
                    param.OracleType = OracleType.VarChar;
                    param.Value = tableName;
                    param.Direction = ParameterDirection.Input;
                    commandeProc.Parameters.Add(param);
     
                    //prefixe string
                    param = new OracleParameter();
                    param.ParameterName = "LePrefixe";
                    param.OracleType = OracleType.VarChar;
                    param.Value = prefixe;
                    param.Direction = ParameterDirection.Input;
                    commandeProc.Parameters.Add(param);
     
                    //LeNumSuivant int
                    param = new OracleParameter();
                    param.ParameterName = "LeNumSuivant";
                    param.OracleType = OracleType.Number;
                    param.Value = 0;
                    param.Direction = ParameterDirection.Output;
                    commandeProc.Parameters.Add(param);
     
                    int LeNumSuivant;
                    LeNumSuivant = Convert.ToInt32(commandeProc.ExecuteOracleScalar().ToString());
                    tran.Commit();
     
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    throw ex;
                }
    la signature de Pl est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE PROCEDURE MIM.MIM_RETOURNE_CODESUIVANT(LeNomTable IN VARCHAR2, LePrefixe IN VARCHAR2, LeNumSuivant OUT NUMBER) IS
    le pl marche très biens sur oracle. mais avec c# j'ai l'erreur suivante :
    La référence d'objet n'est pas définie à une instance d'un objet.
    est ce que vous avez une idée SVP. merci

  2. #2
    Membre éprouvé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2008
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 76
    Par défaut
    Salut,

    Je ne travaille pas trop avec Oracle, mais je pense que ExecuteOracleScalar ne doit être utilisé que si tu appelles une procedure qui renvoi une valeur de retour scalaire (comme un nombre) ou une fonction. Si je comprend bien ton code ce n'est pas le cas.

    Tu peux essayer ce 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
     
    using (OracleConnection objConn = new OracleConnection("Data Source=ORCL; User ID=scott; Password=tiger"))
    {
     
      OracleCommand objCmd = new OracleCommand();
      objCmd.Connection = objConn;
      objCmd.CommandText = "count_emp_by_dept";
      objCmd.CommandType = CommandType.StoredProcedure;
      objCmd.Parameters.Add("pin_deptno", OracleType.Number).Value = 20;
      objCmd.Parameters.Add("pout_count", OracleType.Number).Direction = ParameterDirection.Output;
      try
      {
          objConn.Open();
          objCmd.ExecuteNonQuery();
          System.Console.WriteLine("Number of employees in department 20 is {0}", objCmd.Parameters["pout_count"].Value);
        }
        catch (Exception ex)
        {
          System.Console.WriteLine("Exception: {0}",ex.ToString());
        }
       objConn.Close();
    }
    que j'ai trouvé sur le web (http://www.c-sharpcorner.com/UploadF...oftdotNET.aspx). L'exemple utilise le ExecuteNonQuery et va ensuite lire la valeur du parametre.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Par défaut
    Merci beaucoup pour la réponse. En faite mon procédure retourne un valeur de type scalaire. je vais essayer ton code et voire ce que t as envoyé et je te tiens au courant merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Par défaut
    Merci beaucoup phertzog j'ai remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int LeNumSuivant;
    LeNumSuivant = Convert.ToInt32(commandeProc.ExecuteOracleScalar().ToString());
    tran.Commit();
    avec ce que t'as envoyé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     commandeProc.ExecuteOracleScalar();
    tran.Commit();
    int LeNumSuivant = Convert.ToInt32(commandeProc.Parameters["LeNumSuivant"].Value.ToString());
    est ça marche très bien. Merci encore.

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

Discussions similaires

  1. [Débutant] Retour de valeur d'une procedure stockée
    Par mayekeul dans le forum C#
    Réponses: 8
    Dernier message: 09/01/2012, 08h31
  2. plusieurs valeurs retour procedure stocké
    Par jeepibmx dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 21/09/2009, 19h23
  3. [C#] Comment récupérer la valeur de retour d'une procédure stockée ?
    Par Jinroh77 dans le forum Accès aux données
    Réponses: 23
    Dernier message: 05/10/2006, 15h24
  4. Recuperer une valeur de retour?
    Par nic413 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2006, 11h07
  5. recuperer ler resultat d une procedure stockée
    Par Nadaa dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2004, 08h45

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