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

Accès aux données Discussion :

Besoin de transaction avec TableAdapter -> Est-ce Possible?


Sujet :

Accès aux données

  1. #1
    Membre régulier Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 90
    Points
    90
    Par défaut Besoin de transaction avec TableAdapter -> Est-ce Possible?
    Hello tout le monde...

    Pour un projet orienté web, on a une partie gui (en asp) qui ne doit pas être conscient du fait qu'il y a une base de donnée, une partie Business orienté objet (en c#) et une base de donnée (SQL Server).

    Au début du projet (une semaine environ) j'ai pris la décision d'utiliser les table adapter et dataset typé pour gérer mes accès à la base de données.

    Pas de problème jusque là et je suis même assez content de pouvoir accéder mes champs par propriété... Mais depuis hier je suis sur un problème ennuyant.

    J'ai une série d'action à faire (en clair : efface toutes les subscriptions de l'account, efface l'account) et pour ca j'aurais bien aimé pouvoir faire une transaction. Comme j'ai des objets, ces appels sont sur des objets différent qui mettent à jour la base de données eux même... donc si je dois effacer deux subscription, il y aura deux SubscriptionTableAdapter.Update() avant de faire le AccountTableAdapter.Update().

    Ce qui fait que j'ai plus d'une connexion à la base si je ne me trompe pas (une par update) et donc il m'est impossible de faire une transaction.
    Je me suis rabattu sur le RowState en pensant pouvoir faire un accept ou reject lors du commit/rollback de mes objets. Car mes objets ne sont rien d'autre qu'une représentation des lignes de ma base. Donc chaque objet possède une variable "...Row" (SubscriptionRow, AccountRow) et peut donc savoir l'état de la ligne. Mais le problème c'est que le RowState est mis à Unmodified à chaque Update... donc aucun moyen de revenir à l'état stable précédent par un RejectChange.

    Alors voilà...
    Est ce qu'il existe un moyen pour éviter le AcceptChange Automatique lors du TableAdapter.Update() ?
    Est ce que je dois faire une copie de l'objet "...Row" juste avant une modif pour pouvoir revenir en arrière ?
    Est ce qu'il y a un moyen plus simple de faire des transactions avec des Dataset et des tableAdapter ?

    Est ce que finalement je n'ai pas plutot intérêt à passer en mode connecté ?

    Merci d'avance à ceux qui m'ont lu...

    en espérant vous lire très vite ^^

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Regarde du côté des TransactionScope.

  3. #3
    Membre régulier Avatar de Thor Tillas
    Inscrit en
    Octobre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 113
    Points : 90
    Points
    90
    Par défaut
    ca semble en effet répondre à mes attentes... je vais voir ca de plus près tout à l'heure...

    Merci en tout cas pour la réponse.


    Je vous tiens au courant (et y aura surement un bout de code en prime ^^)

  4. #4
    Membre actif
    Avatar de Ecosmose
    Homme Profil pro
    Archi SI / Soft / Réseau / SCADA /Automate
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Archi SI / Soft / Réseau / SCADA /Automate
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 214
    Points
    214
    Par défaut
    Oui TransactionScope est une bonne solution..fait tout de même attention au degré d'Isolation qui reste déterminant sur la gestion de concurrence.

    De même utilise aussi de préférence un Manager par attacher les commandes des TablesAdapters à une seule connexion (et pas une connexion pour chaque TA)...

  5. #5
    Membre actif
    Avatar de Ecosmose
    Homme Profil pro
    Archi SI / Soft / Réseau / SCADA /Automate
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Archi SI / Soft / Réseau / SCADA /Automate
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 214
    Points
    214
    Par défaut
    Attention aux Deadlocks si tu éléves trop l'isolation

Discussions similaires

  1. Onkey avec word 2007, est-ce possible?
    Par ricoboss dans le forum VBA Word
    Réponses: 1
    Dernier message: 29/08/2011, 18h01
  2. Requête avec une condition, est-ce possible ?
    Par le_chomeur dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2010, 16h10
  3. utilisation d'une API java avec du C#, est ce possible
    Par iamspacy dans le forum C++/CLI
    Réponses: 1
    Dernier message: 29/05/2007, 08h00
  4. dll avec interface conviviale : est-ce possible ?
    Par ebgdas dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 25/07/2006, 23h38
  5. Réponses: 1
    Dernier message: 26/06/2006, 11h33

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