Pour éviter que les mêmes données soient INSÉRÉES en même temps, utilisez un index unique sur les colonnes que vous souhaitez être unique. Le premier INSERT
va réussir, gérer l'erreur pour la perte INSERT
de manière appropriée.
Pour empêcher les utilisateurs 2+ de modifier le même enregistrement (existant) en même temps, utilisez la simultanéité optimiste http://en.wikipedia.org/wiki/Optimistic_concurrency_control. Avec SQL Server, il est facile d'implémenter une concurrence optimiste en utilisant une colonne TIMESTAMP
. Lisez l'horodatage avec vos données. Lors de la mise à jour de la ligne, vérifiez que la valeur de l'horodatage est la même. Si les horodatages ne correspondent pas, l'utilisateur a (voyait) une ligne obsolète. Manipulez ce cas de manière appropriée.
Un exemple en utilisant SqlClient:
command.CommandText = @"
UPDATE tbl
SET LastName = @LastName, FirstName = @FirstName
WHERE ID = @ID AND Timestamp = @Timestamp
";
int rowCount = command.ExecuteNonQuery();
if (rowCount != 1)
throw new DBConcurrencyException();
Utilisez-vous une couche d'O/R? –