Многопользовательская запись обновления приложения 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;
Другие вопросы по тегам