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

Services Web Discussion :

.Net ne reprend pas la main après ExecuteNonQuery()


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut Appel d'une prostoc ne marche pas
    Bonjour,

    J'ai un problème lors de l'exécution d'une proc-stok.
    Celle-ci est appelée par mon code, mais rien ne semble se passer.
    Oracle dit qu'il a terminé, rien n'est mis à jour et aucune erreur ne remonte.
    En fait, en passant en debug, on reste sur l'instruction Bien évidement la procédure a été testée arpès sa rédaction et fonctionne correctement.
    Je pense que c'est l'appel ci-dessous qui cloche, mais je ne vois pas quoi.

    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
                int NbAddLines = -1;
                int NbDelLines = -1;
     
                OracleConnection Cnx = new OracleConnection(this.ConnectionString);
                OracleCommand Cmd = new OracleCommand();
                Cmd.Connection = Cnx;
                Cmd.CommandText = "MaProcStoc";
                Cmd.CommandType = CommandType.StoredProcedure;
     
                OracleParameter param;
                param = new OracleParameter("p_LibelleProjet", OracleType.Char,40);
                param.Value = craRow.Project;
                Cmd.Parameters.Add(param);
    //[...] (passage des autres param)
                try
                {
                    if (Cmd.Connection.State != ConnectionState.Open)
                        Cnx.Open();
                    Cmd.ExecuteNonQuery();
                    NbAddLines = Convert.ToInt32(Cmd.Parameters["p_NbAddLines"].Value);
                    NbDelLines = Convert.ToInt32(Cmd.Parameters["p_NbDelLines"].Value);
                }
                finally
                {
                    if (Cmd.Connection.State != ConnectionState.Closed)
                        Cnx.Close();
                }
    une idée ?
    merci d'avance.

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    tu es sûr que c'est pas un timeout?
    tu as bien rajouté des params en precisant qu'ils sont en output? (tes nombres de lignes)

  3. #3
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    - Ben, je n'ai pas de retour de mon executenonquery... donc je ne sais même pas si c'est un timeout... Et pas de message d'erreur remonté depuis Oracle...

    - les param de sortie sont bien en output

  4. #4
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    Bonjour,
    j'ai un peu fait évoluer mon appel pour donner ce qui suit :

    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
    int NbAddLines = -1;
                int NbDelLines = -1;
     
                OracleConnection Cnx = new OracleConnection(this.ConnectionString);
                OracleCommand Cmd = new OracleCommand();
                Cmd.Connection = Cnx;
                Cmd.CommandText = "SetLigneCra";
                Cmd.CommandType = CommandType.StoredProcedure;
                Cmd.Parameters.Clear();
     
                OracleParameter param;
                #region LISTE DE PARAMÈTRES DE LA PROCÉDURE
                param = new OracleParameter("p_LibelleProjet", OracleType.Char,40);
                param.Value = craRow.Project;
                Cmd.Parameters.Add(param);
     
                param = new OracleParameter("p_LibelleSsProjet", OracleType.Char, 40);
                param.Value = craRow.SubProject;
                Cmd.Parameters.Add(param);
     
                param = new OracleParameter("p_CrCleUnique", OracleType.Number);
                param.Value = craRow.CraId;
                Cmd.Parameters.Add(param);
     
                param = new OracleParameter("p_UserId", OracleType.Number);
                param.Value = craRow.UserId;
                Cmd.Parameters.Add(param);
     
                foreach (EntractLigneCraDay  Day in craRow.CraDays)
                {
                    param = new OracleParameter("p_" + (Day.DayName).ToLower(), OracleType.Number);
                    param.Value = Day.Quotite;
                    Cmd.Parameters.Add(param);
                }
     
                param = new OracleParameter("p_NbAddLines", OracleType.Int32);
                param.Direction = ParameterDirection.Output;
                Cmd.Parameters.Add(param);
     
                param = new OracleParameter("p_NbDelLines", OracleType.Int32);
                param.Direction = ParameterDirection.Output;
                Cmd.Parameters.Add(param);
     
                #endregion LISTE DE PARAMÈTRES DE LA PROCÉDURE
                try
                {
                    if (Cmd.Connection.State != ConnectionState.Open)
                        Cnx.Open();
                    Cmd.ExecuteNonQuery();
                    NbAddLines = Convert.ToInt32(Cmd.Parameters["p_NbAddLines"].Value);
                    NbDelLines = Convert.ToInt32(Cmd.Parameters["p_NbDelLines"].Value);
                }
                finally
                {
                    if (Cmd.Connection.State != ConnectionState.Closed)
                        Cnx.Close();
                    Cmd.Dispose();
                    Cnx.Dispose();
                }
    l'exécution du code me donne un résultat étonnant !

    ASP.net envoie sur notre réseau un tas de données invalides et fini par faire planter le réseau. Il est clair qu'il y a une couille dans mon code, mais là, je ne vois vraiment pas !

    J'utilise une autre Pro-stoc avec la même chaîne de connexion et tout se passe correctement. J'en déduis donc que l'accès à Oracle ne pose pas de problème.

  5. #5
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    J'ai encore travailler sur cette partie de code qui est importante pour mon application.
    Une dernière analyse du problème me donne ceci :

    j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Data.OracleClient;
    Je crée tout ce qui doit être créé et j'invoque mon ExecuteNonQuery()
    le problème vient des paramètres de type Char (et visiblement VarChar) pour lesquels mes chînes sont tronquée après 10 caractères. Donc j'ai spécifié une taille de chaîne à 40 caractères, puis à 80... rien ne change, Oracle se retrouve avec 10 caractères !
    Forcément, ma procédure ne trouve aucun résultats avec mes "where" et rien n'est fait au finale si ce n'est le retour d'un message disant qu'il n'y a pas de données correspondantes...

    J'ai palié au problème en utilisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using System.Data.OleDb;
    . Mais nouveau problème, mon autre procédure stockée qui me retourne un Cursor ne marche pas... OleDB ne connait pas les Cursor Oracle !

    donc, il me faut un moyen pour récupérer mes données avec OleDb ou pour passer des chaines de plus de 10 caractères avec OracleClient...

    Quelqu'un a une idée ?

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    nvarchar au lieu varchar dans ta SP p-e?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2006, 22h09
  2. [C#][.Net 2.0] donner focus à Combobox, après click sur treeview
    Par Harry_polin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/02/2006, 22h27
  3. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 11h00
  4. [VB.NET] Recuperer numero ligne dans DATAGRID apres event
    Par stephane93fr dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/01/2005, 11h58
  5. Connection net OK mais pas d'internet accessible. Pourquoi ?
    Par Flo. dans le forum Développement
    Réponses: 2
    Dernier message: 08/09/2003, 14h49

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