Aitzaz Ahsan Ответов: 2

Как я могу присвоить уникальное значение форме


У меня есть некоторые заявки, когда пользователь нажимает на кнопку Создать автоматически получить максимальное значение из базы данных и увеличить его с помощью C# это мой исходный код
public string GetMaxLPONo()
       {
           var Maxvalue = (from p in db.tbl_LPO
                           select p.LpoNumber).Max();
           if (Maxvalue == null)
           {
               Maxvalue = 2020;
           }
           else
           {
               Maxvalue = Maxvalue + 1;
           }

           return Maxvalue.ToString();
       }

Но когда более одного пользователя получают доступ к системе RequisitionsID будет одинаковым для всех пользователей потому что все равно каждый пользователь просто получает доступ к форме и дает дублирование ID что лучше всего и ярлык метода для его обработки

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

Выше код я пробовал, но в то же время, когда несколько пользователей получают доступ к одному и тому же RequisitionsID будет назначен для форм

Любая помощь заранее спасибо

2 Ответов

Рейтинг:
5

MadMyche

Как заявил Грифф, по тем же самым причинам, что и было заявлено.

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

На стороне базы данных вы бы настроили свою таблицу и использовали столбец идентификаторов для нумерации, как предлагалось ранее. Вот очень простая схема БД

CREATE TABLE dbo.Requisitions (
  ReqID INT IDENTITY(1,1) NOT NULL,
  AccountNumber INT NULL,
  IsComplete BIT NULL,
  ReqValue1 ...,
  ReqValue2 ...,
  CONSTRAINT [PK_Requisitions_ID] PRIMARY KEY CLUSTERED([ReqID] ASC)
) ON [PRIMARY]

И когда запрашивается новая заявка, вы запускаете хранимую процедуру. Затем вы можете вызвать его, когда кто-то заполняет форму с помощью простого параметризованного запроса, и он будет иметь фактический номер записи до заполнения формы.
CREATE PROCEDURE dbo.Requisition_Create (
  @AccountNumber INT,
  @ReqID INT OUTPUT
) AS
BEGIN
  INSERT Requisitions (AccountNumber, IsComplete)
  VALUES (@AccountNumber, 0)

  SELECT @AccountNumber = SCOPE_IDENTITY()
END


После завершения работы вы просто запустите другой SP, чтобы выполнить обновление с любыми значениями, которые вам нужно добавить в запись
CREATE PROCEDURE dbo.Requisition_Update (
  @ReqID INT,
  @ReqValue1 ...,
  @ReqValue2 ...
) AS
BEGIN
  UPDATE Requisitions
  SET ReqValue1 = @ReqValue1, ReqValue2 = @RaqValue2
  WHERE  RegID = @ReqID
END


Рейтинг:
0

OriginalGriff

Никогда так не делай.
Никогда не назначайте заранее уникальное значение: это должно быть поле идентификатора в БД, и вы позволяете самой базе данных позаботиться о нем, когда добавляете строку.
Если вы заранее назначаете, как вы это делаете, то вы всегда будете получать проблемы с многопользовательским доступом. Подумайте об этом: вам не нужен номер заявки, пока вы действительно не сделаете заявку в реальной жизни - так зачем же он вам нужен, прежде чем вы создадите его в БД?


Aitzaz Ahsan

@OriginalGriff я хочу показать номер заявки, когда пользователь нажимает на кнопку Создать новую заявку, в то же время я хочу показать им свой уникальный идентификатор

OriginalGriff

Нет - зачем им это нужно? Попытка заранее распределить число всегда плохая идея - люди печатают на разных скоростях для начала, и они часто меняют свое мнение. Вы собираетесь разместить уведомление на всех экранах других пользователей, что "система занята, потому что Джо Шмоу-медленная машинистка, поэтому вам придется подождать, чтобы ввести заявку"? Это же глупо! Никогда не распределяйте заранее. Никому не нужен номер заявки, пока он не появится в системе - потому что, если вы дадите ему один, и он отменит ввод, у них все еще есть номер, но другой пользователь также получит его через несколько часов!

Подумайте об этом - вы пытаетесь сохранить их не только уникальными, но и последовательными. Что произойдет, если вы выделите номер, и они нажмут кнопку отмены? Или там отключили электричество? Номер выделен, но не имеет данных... Или они вводят неверные данные, и в результате система отклоняет заявку?

Пусть БД позаботится об этом и даст им номер только тогда, когда заявка будет принята БД.