Многопользовательская запись обновления приложения Windows с использованием SQL Server & C#
Я разрабатываю приложение для Windows, где несколько пользователей могут использовать одну и ту же базу данных.
Моя проблема заключается в том, когда при вставке новой записи в таблицу базы данных мне нужно отобразить новую customerID
в форме регистрации клиента. Для этого я получаю последний идентификатор клиента и увеличиваю его на единицу и отображаю идентификатор нового клиента. В многопользовательской среде, если два человека пытаются добавить нового клиента одновременно, возникнет проблема с отображением нового идентификатора клиента. И когда два пользователя одновременно получают доступ к одной и той же записи и обновляют ее.
Что делать?
2 ответа
Не получайте последний идентификатор клиента и автоматически увеличивайте его на единицу, это небезопасно по той причине, которую вы упомянули.
После оператора вставки новой записи просто выберите вставленный идентификатор и отобразите его в форме регистрации клиента со следующей строкой кода:
SELECT SCOPE_IDENTITY()
Или проверьте этот оператор выбора, который делает эквивалент:
SELECT @RecordId= MAX([RecordId])
FROM [dbo].[CustomerTbl]
Вы можете вывести вставленные значения в табличную переменную и затем вернуть это значение
например
DECLARE @output TABLE
(Col1 VARCHAR(10));
INSERT targetTable
(Col1)
OUTPUT inserted.Col1
INTO @output
VALUES ('ACC1001')
SELECT Col1 FROM @output;