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

ASP.NET Discussion :

[.NET 2.0][oracle 9i] commiter une proc stock dans le code c#


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 31
    Points : 22
    Points
    22
    Par défaut [.NET 2.0][oracle 9i] commiter une proc stock dans le code c#
    Bonjour,

    je développe sous visual studio avec le frame work 2.0, et une bdd oracle 9i.
    J'ai l'obligation d'utiliser des procédures stockées.
    Je récupère des données d'un fichier xml, sur lesquelles j'effectue un certains nombre d'pérations de trie, de liaison et de modification via des formulaires. Je dois ensuite insérer ces données dans 4 tables différentes, une table entité, une table entité_info, une table option et une table prix_option. Chacune de ces tables contiennent evidemment plusieurs champs, et j'ai plusieurs milliers de lignes à insérer dans chacune des tables.
    Pour le moment j'arrive bien à insérer mes données dans mes tables, mais l'appel des procs stocks se fait à l'aide d'une classe OracleHelper et de la méthode ExecuteScalar ayant en paramètre la procédure stockée, appelée au sein d'une boucle. J'insère donc mes lignes une par une, puis je passe à la table suivante etc.
    Ma question est la suivante, je souhaiterai exécuter toutes mes procs stocks sans les commiter, et les commiter à la fin si tout c'est bien passé, car si il y a un souci lors d'une proc stock, il faut recommencer toute l'intégration des données. Est-ce possible, et si oui comment?
    Si c'est possible, est-ce qu'une proc stock "select" effectuer après une proc stock "insert" non commitée récupère tout de même les données insérées par la proc stock "insert" non commitée?

    d'avance merci!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    si tu utilises une même transaction, tu ne commites que s'il n'y a pas d'erreur.
    si tu fais un insert puis un select dans cette même transaction, il me semble que le select te renverra les données de ton insert.à revérifier tout de même.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Ok donc si j'ai bien compris (je ne m'y connais pas beaucoup donc j'ai fait quelques recherche avec tes mots clés), dans un procédure asp je crée ma transaction, et je passe la meme transaction en parametre de ma procédure OracleHelper.ExecuteScalar à la place de passer la connection string. Ensuite j'utilise la meme transaction pour toutes mes procédures stockées et enfin je referme ma transaction ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    c'est tout à fait ça.

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Ok, donc pour etre sur, avant j'avais un truc comme ca:

    OracleHelper.ExecuteScalar(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString, CommandType.StoredProcedure, "OPTIONPACKAGE.INSERTOPTION", ps);


    et maintenant ca donne ca (la synthaxe ne doit pas etre bonne car ca ne compile pas...) :
    OracleTransaction tr;
    tr.Connection = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

    et la mes multiples appels aux procs avec le param ps qui change selon les enregistrements:
    OracleHelper.ExecuteScalar(tr, CommandType.StoredProcedure, "OPTIONPACKAGE.INSERTOPTION", ps);

    puis
    tr.Commit(); si y'a pas eu de pb, ou tr.Rollback() si il y en a eu.
    Le tr.Commit() est -il obligatoire ou est-il fait automatiquement si tout s'est bien passé?


    faut-il que je referme la transaction ? par exemple avec tr.Dispose() ?

    Enfin, est-il necessaire d'utiliser la meme connection ou puis-je créer une connection par appel à la procédure stockée et si cela est fait au sein d'une meme trnsaction, le commit se fait bien a la fin ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    utilise une seule et même transaction. sinon ce sera le bordel pour savoir ce qui a été commité ou non.
    si c'est ok tu fais commit sinon rollback.
    pas besoin de faire un dispose mais je pense que ca ne coute rien.
    pour la connexion c'est pareil. une seule connexion

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    J'ai toujours un souci, ma synthaxe n'est pas bonne, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    OracleConnection oConnexion = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    OracleTransaction tr = oConnexion.BeginTransaction();
     
    OracleCommand cmd = new OracleCommand();
    oConnexion.Open();
    cmd.Connexion = oConnexion;
    cmd.Transaction = transaction;
    cmd.CommandText = commandText;
    cmd.CommandType = commandType;
    AttachParameters(cmd, commandParameters);
    cmd.ExecuteScalar();
    mais a la compilation j'ai ce message :
    La propriété ou l'indexeur 'Oracle.DataAccess.Client.OracleCommand.Transaction' ne peut pas être assigné -- il est en lecture seule
    et pourtant c'est expliqué dans ce tuto : http://morpheus.developpez.com/oracledotnet/ dans le point F, il dit bien d'utiliser cmd.Transaction = transaction;

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    et dans le constructeur d'OracleCommand tu n'as pas une version avec la transaction?

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    non il y en a bien un avec la connexion mais ca ne m'aide pas.
    Le pire c'est que meme sur msdn ils indiquent de faire comme ca:http://msdn2.microsoft.com/en-us/lib...ansaction.aspx

    j'ai aussi essayé de créer le OracleCommand a partir de la connexion comme dans l'exemple msdn ( OracleCommand command = connection.CreateCommand(); ) mais j'ai toujours le meme message d'erreur. J'ai aussi trouvé sur le forum des topics créés avec le meme probleme et aucun n'a de solution

Discussions similaires

  1. Réponses: 11
    Dernier message: 14/01/2009, 12h03
  2. Mettre le résultat d'une Proc Stock dans une variable
    Par zooffy dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 18/06/2008, 11h20
  3. Réponses: 3
    Dernier message: 28/08/2007, 15h21
  4. [ORACLE]Paramètre d'une proc stock
    Par HexChit dans le forum SQL
    Réponses: 3
    Dernier message: 14/09/2006, 11h23

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