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

MS SQL Server Discussion :

[sql-server] Locker des enregistrements


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 284
    Par défaut [sql-server] Locker des enregistrements
    Bonjour,

    Je souhaiterai savoir comment verrouiller des enregistrements lors d'un SELECT. En effet, je souhairai poser un verrou sur un enregistrement avant d'effectuer un update afin que d'autre utilisateurs ne puisse pas accéder à l'enregistrement pendant l'utilisateur effectue ses modifications et ce jusqu'a l'update.

    J'ai vu que sous ORACLE, on pouvait le faire avec un for UPDATE, mais je ne sais comment avec sql server à partir d'une application vb.NET.

    D'avance, je vous remercie. Bien à vous

    Olbi

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Que signifie "accéder" ? En lecture ou en écriture ? En écriture en passant en SET ISOLATION LEVEL REPEATABLE READ et en maintenant une transaction, en lecture en passant en SET ISOLATION LEVEL SERIALIZABLE.

    En sachant que tu vas tuer la concurrence d'accès.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 284
    Par défaut
    Merci pour votre réponse.

    En fait, je veux vérouiller un enregistrement dans une db sql a partir d'une application ecrite en vb.net sous visual studio 2005 sans passer par des procédure stockée. Sous access avec le DAO, je pouvais verrouiller une enregistrement en faisant monRecodset.edit. Dés ce moment quiconque veut lire l'enregistrement récupérer le message suivant 'L'enregistrement est verrouiller par un autre utilisateur'. Je veux reproduire la même chose avec une base de données SQL

    Olbi

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Tu peux créer une transaction et soit passer par les niveau d'isolation dont je parlais, soit en ajoutant le table hint WITH (UPDLOCK).

    Mais c'est une stratégie de verrouillage pessimiste suicidaire. Un serveur SQL est concu pour être multiutilisateurs. Que va-t-il se passer si ton utilisateur laisse sa fenêtre ouverte en modif pendant des jours ?

    Tu peux aussi le faire à la main, en maintenant une table d'enregistrements en cours de modification, que tu peux nettoyer régulièrement, notamment en testant si la connexion qui a généré le verrou n'est plus ouverte.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 284
    Par défaut
    Sans trop vouloir abuser, auriez-vous un exemple de code vb.net avec le table hint WITH (UPDLOCK).

    Je ne sais pas ou je dois le mettre.

    monIDBcommand.CommandText = "SELECT * FROM maTable WHERE key =" & valeur

    monIDBcommand.ExecuteReader

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    monIDBcommand.CommandText = "SELECT * FROM dbo.maTable WITH (UPDLOCK) WHERE key =" & valeur
     
    monIDBcommand.ExecuteReader
    - Il faut que ce soit dans une transaction.
    - Il vaut mieux faire des procédures stockées
    - bon courage

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/12/2006, 16h24
  2. Réponses: 7
    Dernier message: 16/11/2006, 08h49
  3. Réponses: 4
    Dernier message: 08/06/2006, 13h18
  4. Réponses: 10
    Dernier message: 10/05/2006, 10h44
  5. tableau descriptif de SQL server selon des critères techniq
    Par h.sofia dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/2006, 16h25

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