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

Windows Forms Discussion :

[C#] [Oracle] Problème d'Update


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut [C#] [Oracle] Problème d'Update
    Bonjour,

    j'ai actuellement un problème très bizarre que je ne comprends pas. Voici un extrait de mon code ( avec une requête simplifié au maximum pour démarrer ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string strSQL = "UPDATE REPTYPE_RECLAMATION_V2 SET RPT_ACTIF = 0 WHERE (RPT_ID = 1);";
     
    OracleCommand oraCmd = new OracleCommand(strSQL, oraCnx);
    oraCmd.CommandType = CommandType.Text;
     
    try
    {
    	int i = oraCmd.ExecuteNonQuery();
    }
    catch(OracleException excOra)
    {
    	Console.WriteLine(excOra.Message);
    }
    l'object oraCnx est bien initialisé car je passe par le même code pour réaliser des requêtes d'insertion.
    Cela me produit l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [13:14:04]ORA-00911: invalid character
    En effet dans la requête SQL j'ai mis un point virgule en fin de ligne. Après lecture des causes de l'exception j'enlève donc ce point virgule. Je relance mon application et la ca freeze ( je suis en debug ) sur l'ExecuteNonQuery(). Je ne trouve pas sur le net de tuto avec des requêtes update similaires. Je me suis aidé de celui ci pour développer ce que j'ai à faire. Tout marchait pour le mieux concernant la connexion/déconnexion à la BDD, les sélections et même insertions.... mais les mises à jour ne fonctionnent pas


    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string strSQL = @"UPDATE REPTYPE_RECLAMATION_V2 SET RPT_ACTIF = 0 WHERE (RPT_ID = 1);";
    tu as le meme probleme ?

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    oui toujours le même.

  4. #4
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    Vous devez savoir que tout ordre SQL du DML (Data Manipulation Language), c'est à dire tout ordre de type INSERT, UPDATE et DELETE est une transaction.
    Une transaction peut-être validée, au moyen du mot-clé COMMIT, ou bien elle peut-être annulée, grâce à ROLLBACK.
    En .NET (et grâce à l'ODP), vous avez la possibilité de gérer ces transactions au moyen de l'objet OracleTransaction, objet qui vous est renvoyé grâce à la méthode BeginTransaction de l'objet OracleConnection.
    tu es bien passé par une transaction pour ton update ?

    @+
    Someday I will be the most powerful Jedi !

    Freddyboy - Blog

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Re: [C#] [Oracle] Problème d'Update
    Initialement mon code ressemble plutôt à ca ( voir les trois lignes mis en commentaires ).

    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
    string strSQL = @"UPDATE REPTYPE_RECLAMATION_V2 SET RPT_ACTIF = 0 WHERE (RPT_ID = 1);";
     
    //OracleTransaction oraTrans = oraCnx.BeginTransaction();
    OracleCommand oraCmd = new OracleCommand(strSQL, oraCnx);
    oraCmd.CommandType = CommandType.Text;
     
    try
    {
    	int i = oraCmd.ExecuteNonQuery();
    	//oraTrans.Commit();
    }
    catch(OracleException excOra)
    {
    	Console.WriteLine(excOra.Message);
    	//oraTrans.Rollback();
    }
    catch(InvalidOperationException excInvalid)
    {
    	Console.WriteLine(excInvalide.Message);
    	//oraTrans.Rollback();
    }
    Et ca me faisant cette exception que je comprends pas du tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execute requires the Command object to have a Transaction object when the Connection object assigned to the Command is in a pending local transaction.  The Transaction property of the Command has not been initialized.
    ... au lieu de celle dont je parlais dans mon premier post. Donc j'ai retiré c'est trois lignes pour "simplifier" .

    Par contre maintenant ca ne freeze plus quelque soit la syntaxe de fin et avec/sans le '@' dont tu as parlé.

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Et si tu executes ta requête SQL dans OEM, ca marche ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    OEM ? je ne connais pas ...

    si je l'execute avec SQL nav en tout cas ca marche.

  8. #8
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Points : 1 515
    Points
    1 515
    Par défaut
    Enlève le ; à la fin de ta requête.
    Ce caractère n'est valide que si tu as une suite de requêtes.
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  9. #9
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par _Air_
    OEM ? je ne connais pas ...
    Oracle Enterprise Manager

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  10. #10
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Décommente les parties en commentaires:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //OracleTransaction oraTrans = oraCnx.BeginTransaction();
    etc...

    et enlèves le ; de ta requête

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Re: [C#] [Oracle] Problème d'Update
    Je n'ai pas du être très clair dans mon message précédent, je vais donc le remettre au "propre"

    Citation Envoyé par _Air_
    Initialement mon code ressemble plutôt à ca

    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
    string strSQL = "UPDATE REPTYPE_RECLAMATION_V2 SET RPT_ACTIF = 0 WHERE (RPT_ID = 1)";
     
    OracleTransaction oraTrans = oraCnx.BeginTransaction();
    OracleCommand oraCmd = new OracleCommand(strSQL, oraCnx);
    oraCmd.CommandType = CommandType.Text;
     
    try
    {
    	int i = oraCmd.ExecuteNonQuery();
    	oraTrans.Commit();
    }
    catch(OracleException excOra)
    {
    	Console.WriteLine(excOra.Message);
    	oraTrans.Rollback();
    }
    catch(InvalidOperationException excInvalid)
    {
    	Console.WriteLine(excInvalide.Message);
    	oraTrans.Rollback();
    }
    Ca génère cette exception ( de type InvalidOperation ) que je ne comprends pas du tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MESSAGE : Execute requires the Command object to have a Transaction object when the Connection object assigned to the Command is in a pending local transaction.  The Transaction property of the Command has not been initialized.
     
    SOURCE : System.Data.OracleClient 
     
    et le STACKTRACE: 
    at System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, CommandBehavior behavior, Boolean isReader, Boolean needRowid, OciHandle& rowidDescriptor, ArrayList& refCursorParameterOrdinals)
       at System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciHandle& rowidDescriptor)
       at System.Data.OracleClient.OracleCommand.ExecuteNonQueryInternal(Boolean needRowid, OciHandle& rowidDescriptor)
       at System.Data.OracleClient.OracleCommand.ExecuteNonQuery()
       at _oraNET_._Work_.CReclam_RepType.storeData(COraConnexion& oraCnx, Int32 iID) in ...
    .. bref j'ai essayé et ré-essayé tout un tas de "combinaison de code" ( dont celle ci dessus bien évidemment) mais rien ne fonctionne

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bon finalement j'ai trouvé mon problème

    voila le code valide, et surtout la ligne 11 qui était la raison de la génération de l'exception :
    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
    00 - string strSQL = "UPDATE " + _TABLE_ +  " SET myAttribute = " + strAttribute + " WHERE myConstraint = " + strKey;
    01 - OracleTransaction oraTrans = null;
    02 - OracleCommand oraCmd = null;
    03 - try	
    04 - {
    05 - 	// Récupération de l'objet OracleTransaction : Début de la transaction
    06 - 	oraTrans = oraConnection.BeginTransaction(IsolationLevel.ReadCommitted);
    07 - 	// Création de la Commande SQL
    08 - 	oraCmd = new OracleCommand(strSQL, oraCnx);
    09 - 	// paramétrage
    10 - 	oraCmd.CommandType = CommandType.Text;
    11 - 	oraCmd.Transaction = oraTrans;		// <---- LA ! Définition de la transaction dans la commande.
    12 - 
    13 - 	// Exécution de la requête
    14 - 	int iCount = oraCmd.ExecuteNonQuery();
    15 - 	
    16 - 	// Validation de la requête
    17 - 	oraTrans.Commit();
    18 - }
    19 - catch(OracleException excOra)
    20 - {
    21 - 	Console.WriteLine(excOra.Message);
    22 - 	oraTrans.RollBack();
    23 - }
    24 - catch(InvalidOperationException excInvalid)
    25 - {
    26 - 	Console.Writeline(excInvalid.Message);
    27 - 	oraTrans.RollBack();
    28 - }
    29 - catch(Exception exc)
    30 - {
    31 - 	Console.Writeline(exc.Message);
    32 - 	oraTrans.RollBack();
    33 - }
    34 - finally
    35 - {
    36 - 	if(oraCmd != null)
    37 - 	{
    39 - 		// Libération des resources
    40 - 		oraCmd.Dispose();
    41 - 	}
    42 - }
    merci pour vos réactions en tous cas

  13. #13
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Arf, bien vu: j'aurai du penser à te faire affecter la propriété Transaction


    En tout cas, bravo

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/03/2008, 08h16
  2. [ORACLE] problème de syntaxe UPDATE
    Par magic charly dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2006, 12h26
  3. Problème requete update
    Par krfa1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/03/2005, 08h47
  4. problème pour updater une BD
    Par yoda_style dans le forum ASP
    Réponses: 6
    Dernier message: 17/03/2005, 10h56
  5. [PowerBuilder/Oracle] Problème de procedure stockée
    Par delphine_lep dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 02/09/2004, 14h08

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