Niveau d'isolement des transactions
Microsoft SQL Server Compact 4.0 fonctionne par défaut avec un niveau d'isolation Read Committed. Cependant, il peut être nécessaire à une application de fonctionner avec un autre niveau d'isolement. Pour implémenter des niveaux d'isolement différents dans des applications, vous pouvez personnaliser le verrouillage pour une session complète en définissant le niveau d'isolement de la session avec l'instruction SET TRANSACTION ISOLATION LEVEL.
Important
Si le niveau d'isolement par défaut dans SQL Server Compact 4.0 est Read Committed (Lecture validée), l'utilisation de ce niveau n'a pas pour résultat l'application de verrous S quand des données sont lues. Ce comportement diffère de celui de MicrosoftSQL Server. Dans SQL Server, lors de l'utilisation du niveau Lecture validée, un verrou S est demandé chaque fois qu'une ligne est lue, qui attendra si un verrou est en conflit sur cette ligne. SQL Server Compact 4.0 ne requiert pas de verrou S parce que les versions des pages de données sont automatiquement maintenues pour que les données validées puissent être lues sans qu'un verrou soit nécessaire. Ceci est important parce que, dans SQL Server Compact 4.0, les opérations SELECT ne doivent pas appliquer de verrous sur les données et sont presque toujours effectuées avec succès. Les opérations SELECT ne doivent pas attendre si certaines données ont un verrou X, au contraire de SQL Server. Les opérations SELECT requièrent toujours un verrou Sch-S. L'opération va échouer seulement si la table est modifiée, car il y aura un verrouillage Sch-X en conflit.
Quand le niveau d'isolement est spécifié, le verrouillage fonctionne à ce niveau pour toutes les instructions SELECT de la session SQL Server Compact 4.0 et reste actif jusqu'à la fin de la session ou jusqu'à ce que le niveau d'isolement soit modifié. Par exemple, pour définir le niveau d'isolement des transactions à Sérialisable et garantir qu'aucune ligne fantôme ne peut être insérée par des transactions concurrentes dans la table Employee, utilisez l'instruction SQL suivante :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
SELECT EmployeeID FROM Employee;
Vous pouvez aussi définir le niveau d'isolement des transactions par programme. Voici un exemple de la façon de définir un niveau d'isolement des transactions avec ADO.NET :
SqlTransaction myTrans;
myTrans = myConnection.BeginTransaction(IsolationLevel.RepeatableRead);