Чтобы предотвратить одновременную вставку одних и тех же данных, используйте уникальный индекс для столбцов, которые вы хотите быть уникальными. Первый INSERT
будет успешным, обработайте ошибку для проигравшего INSERT
соответственно.
Чтобы не допустить одновременного изменения 2+ пользователями одной и той же (существующей) записи, используйте оптимистичный параллелизм http://en.wikipedia.org/wiki/Optimistic_concurrency_control. В SQL Server легко реализовать оптимистичный параллелизм с использованием столбца TIMESTAMP
. Прочитайте метку времени с вашими данными. При обновлении строки убедитесь, что значение метки времени совпадает. Если временные метки не совпадают, значит, пользователь имел (просматривал) устаревшую строку. Обращайтесь с этим делом соответствующим образом.
Пример использования 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();