Як я можу переконатися, що користувач не намагається ввести вже існуючий ідентифікатор первинного ключа?

У мене є додаток, який додає домашніх тварин до бази даних SQL.

В даний час користувач повинен знати, які PetID існують, і тому повинен знати, що можна додати. Якщо користувач намагається ввести вже існуючий ідентифікатор, програма видає помилку.

Я думаю, мені потрібно PetID (верхній текстове поле) значення, яке буде автоматично вирішується на сторінці завантаження, з значенням, яке не буде зіткнутися з вже існуючим значенням ...

Хтось може допомогти? я поняття не маю, як це зробити

Мені потрібно page_load для автоматичного пошуку бази даних SQL для доступних PetID, вибрати найменше значення і мати його в текстовому полі автоматично, готове для користувача (так що користувачеві не доведеться турбуватися про вибір того, хто не буде " t вже зроблено) ...

Picture of current Pets table data Picture of web application

3
ExecuteNonQuery повертає кількість рядків, змінених у базі даних. Коли у вас є набір первинного ключа, база даних виконує одну з наступних дій з ExecuteNonQuery 1) Insert: повертає нуль, коли ключ вже знаходиться в базі даних. Потім необхідно використовувати Update для зміни значення 2) Update: повертає нуль, якщо ключ не в базі даних. Потім потрібно використовувати Insert, щоб поставити нове значення.
додано Автор jdweng, джерело
Що ви розумієте під пошуком доступного ідентифікатора? Є попередньо створені ідентифікатори або ви маєте на увазі останній ідентифікатор + 1? Ви повинні використовувати значення ідентичності згідно з іншим коментарем.
додано Автор Crowcoder, джерело
додано Автор mjwills, джерело
@BingoDingo Чи можете ви розповісти нам про те, чому ви не хочете використовувати колонку IDENTITY?
додано Автор mjwills, джерело
Коротка відповідь: ви не можете (легко). Уявіть, якщо б ви могли. Припустимо, у базі даних було 6 домашніх тварин. І ви, і я завантажуємо додаток. Який номер для домашніх тварин повинен показуватися кожному з нас? Тепер, що, якщо було 100 користувачів? Тепер, ви можете використовувати @ JesúsLópez рішення нижче - але це створить прогалини кожен раз, коли хтось завантажує програму . Подумайте про це від клієнта
додано Автор mjwills, джерело
Не слід вказувати ідентифікатор, який потрібно вставити вручну, а не отримати значення ідентифікатора для ідентифікатора після статті вставки у вивід.
додано Автор Suraj Kumar, джерело
@mjwills це не дублікат
додано Автор BingoDingo, джерело
@kennyzx база даних не забезпечує автоматичне збільшення ID, я отримую помилку.
додано Автор BingoDingo, джерело
@mjwills можливо ви не розумієте моє питання, як я можу мати ID, який доступний, чекаючи у верхньому текстовому полі, при завантаженні сторінки? також зробіть це, щоб користувач не міг його змінити.
додано Автор BingoDingo, джерело

5 Відповіді

Це звичайно для введення даних і повернення ідентифікатора після додавання запису до бази даних (використовуючи вставку ідентичності в полі Id).

Якщо ви хочете, щоб наступне число відображалося ПЕРЕД створенням даних, скористайтеся цілим полем для ідентифікатора без опції Identity Insert і створіть послідовність SQL Sever. Створіть збережену процедуру, щоб повернути наступний порядковий номер для відображення на сторінці створення

1
додано

Ви можете створити PetId як стовпець ідентичності, як показано нижче:

[PetId] [int] IDENTITY(10,1) NOT NULL

Таким чином, вам не доведеться додавати його вручну, кожен раз, коли ви додаєте запис Pet, PetId буде генеруватися автоматично і буде унікальним. Отже, ніякого зіткнення з PetId не відбудеться.

Тут 10 представляє перший ідентифікаційний номер і 1 представляє, як ваші PetIds будуть збільшені.

З повагою, Pratik

1
додано
Так, погоджується, що це може бути так, коли користувач хоче зберегти PetId за своїм бажанням. Якщо це не турбує користувача, ми можемо зробити це як стовпець ідентичності.
додано Автор Pratik Somaiya, джерело

Додайте подію TextChanged, яка перевіряє існуючі значення і повідомляє користувачеві, чи введений PetID доступний чи ні.

1
додано

Одним з варіантів буде використання послідовності:

CREATE SEQUENCE pet_id_seq START WITH 7

I'm starting it with 7 because it is the first available pet_id

Потім на завантаженні сторінки отримайте наступне значення для послідовності, виконавши наступний запит:

SELECT (NEXT VALUE FOR pet_id_seq) AS next_pet_id

Покажіть значення, яке повертає запит у текстовому полі pet_id.

Цей підхід має один недолік, він створює прогалини, якщо ви відкриваєте сторінку, але ви насправді не вставляєте рядок тварини, ідентифікатор втрачається назавжди. Але я думаю, вам не треба турбуватися, є багато цифр, ви їх не вичерпаєте.

0
додано

Встановіть автоматичну інкрементацію стовпця id і не дозволяйте користувачеві вставляти її, щоб база даних сама вирішила. Або ви можете змінити тип стовпця ідентифікатора та використати Guid.NewGuid() для створення нового ідентифікатора.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug