Utilisateur anonyme
-
6 sept. 2007 à 14:11
cs_rodcobalt22
Messages postés193Date d'inscriptiondimanche 10 février 2002StatutMembreDernière intervention16 février 2016
-
15 avril 2008 à 09:25
Bonjour à tous,
Je développe une application en C# (forcément) liée à une base Oracle.
Cependant, je n'arrive pas à gérer les transactions sur cette base : exemple, j'insère un enregistrement dans une table et lorsque j'appuie sur le bouton Annuler de ma fenêtre où j'ai codé un Rollback, il ne se passe rien.
Pouvez-vous m'aider ?
Ci-joint ma classe de connection.
Merci d'avance, (ne pas faire attention à la méthode FormaterRequete...) .
using System;
using System.Data;
using System.Data.OracleClient;
using System.Windows.Forms;
namespace DAL
{
public class CDalOracle
{
#region Attributs
private int m_iNombreLignes; // Nombre de lignes du résultat d'une requête
private int m_iNombreColonnes; // Nombre de colonnes du résultat d'une requête
private OracleConnection m_oracleConnection; // Connection à la base de données Oracle
private OracleCommand m_oracleCommande; // Instruction SQL
private OracleDataReader m_oracleDataReader; // Flux de lignes de données stockant le résultat d'une requête
private OracleTransaction m_oracleTransaction; // Gère les transactions Commit & Rollback
private static string m_sCHAINE_DE_CONNEXION; // Chaine de connection à la BDD
#endregion
try
{
int iIndiceParams = 0; // Indice du paramètre courant de listeParametres
int iNombreParams = listeParametres.Length; // Nombre de paramètres associés à sRequete
int iLongueur = 0; // Longueur de tous les paramètres de la requête
int j = 0; // Indice de cReq
for (int i = 0; i < iNombreParams; i++)
{
iLongueur += listeParametres[i].Length;
// Dans le cas d'un paramètre vide, on ajoute 3 caractères pour écrire IS NULL au lieu de = ''
if (listeParametres[i] == "")
iLongueur += 4;
}
int iLongueurNouvelleChaine = iLongueur + sRequete.Length - iNombreParams; // Longueur de la nouvelle chaine propre
char[] cReq = new char[iLongueurNouvelleChaine];
// Pour tous les caractères de sRequete
for (int i = 0; i < sRequete.Length; i++)
{
if (sRequete[i] == '¤') // Si c'est un ¤, on remplace ¤ par le premier paramètre de listeParametres[]
{
string sParam = listeParametres[iIndiceParams++];
if (sRequete[i - 1] != '\'')
sParam = sParam.Replace(",", ".");
cs_rodcobalt22
Messages postés193Date d'inscriptiondimanche 10 février 2002StatutMembreDernière intervention16 février 2016 7 sept. 2007 à 10:12
Tu veux dire quoi par il ne se passe rien.
Ta modification est appliqué ou elle ne l'est pas ?
Par contre, je te conseil de revoir la gestion de tes membres car ils sont réaffecté plusieur fois (et d'après moi pour rien).
Peut être qu'en faisant le ménage tu comprendrais pourquoi cela ne fonctionne pas.
En fait, lorsque je fais l'ajout et que je regarde tout de suite en base (sans commit préalable), je vois la ligne que je viens d'ajouter.
Mais lorsque j'appuie alors sur le bouton annuler de la fenetre (à partir d'où est codé le rollback) et qu'il s'exécute, je regarde en base et la ligne est toujours présente (même lorsque j'actualise).
cs_rodcobalt22
Messages postés193Date d'inscriptiondimanche 10 février 2002StatutMembreDernière intervention16 février 2016 11 sept. 2007 à 12:10
C'est au niveau de ton objet Command. il y a une propriété Transaction qui ne doit pas être renseigné.
Un conseil, refait ce code pour y voir plus clair car tu as des affectations dan tout les coins
RodCobalt22, vous salue bien
Pensez au TAG résolu ! Ainsi les réponses seront plus facile à trouver et les serial Helper iront plus vite
cs_rodcobalt22
Messages postés193Date d'inscriptiondimanche 10 février 2002StatutMembreDernière intervention16 février 2016 15 avril 2008 à 09:25
RodCobalt22, vous salue bien
Pensez au TAG résolu ! Ainsi les réponses seront plus facile à trouver et les serial Helper iront plus vite
PS : Pardonnez mes fautes d'orthographe (All