ahmed_sa Ответов: 1

Как разрешить параллелизм при многопользовательской работе с одной и той же формой windows ?


проблема

Как разрешить параллелизм при многопользовательской работе с одной и той же формой windows ?


Я работаю над приложением Visual studio 2015 windows form csharp

У меня есть имя таблицы Employee на sql server 2012 есть три поля

Serial int pk(primarykey)

EmployeeName nvarchar(100)

Адрес nvarchar(100)

Тель тип nvarchar(100)

У меня есть windows form FrmEmployee

Эта форма windows может быть доступна от нескольких пользователей в одно и то же время может быть 5 пользователей

Когда эти пять пользователей открывают windows form frmemployee в одно и то же время

Если два пользователя вставляют одну и ту же запись в одно и то же время это сделает первичный ключ нарушения так что как это предотвратить

от случившегося

Пример

Если у меня есть 3 пользователя A,B,C

Предположим, что в таблице employee последний серийный или серийный максимум это 5

FrmEmployee windows form имеет текстовое поле Serial

Когда пользователь откройте форму Windows FrmEmployee затем серийный будет сделать следующий, а 6 и это не проблема для одного пользователя

но если пользователь а откроет форму windows и серийный номер будет 6 то

в то же время

Пользователь B откройте форму windows FrmEmployee и серийный номер будет равен 6

При добавлении данных пользователь а добавит запись успеха

Но Б даст ему первичный ключ нарушения

так что

Как решить эту проблему, пожалуйста ?

Что я уже пробовал:

if user A open windows form and serial be 6 then 

on same time

User B open windows form FrmEmployee and serial will be  6 

When add data user A will add record success

But B will give him violation primary key

1 Ответов

Рейтинг:
0

OriginalGriff

Просто: вы сами выполняете назначение "следующего значения" и почти наверняка "предварительно назначаете" значение-например, вы назначаете "следующий серийный номер сотрудника" перед добавлением его в БД (вероятно, когда форма открыта, поэтому она готова к использованию).

Это плохая идея: чем раньше вы ее создадите, тем больше у вас будет проблем. Создайте его при открытии формы (или сразу после отправки последней в БД), и вы получите проблему очень, очень часто; создайте его непосредственно перед отправкой данных в БД, и вы получите его иногда, но частота будет увеличиваться по мере увеличения количества пользователей.

Единственный способ сделать это - назначить его, поскольку данные зафиксированы в БД, и лучший способ сделать это-позволить БД обрабатывать их с помощью столбца идентификаторов.

Он не нужен вам до того, как вы создадите строку базы данных, даже если вы думаете, что это так - вы не можете использовать его для перекрестной справочной информации или поиска чего-либо, пока сотрудник не существует!