jitendraintarvo Ответов: 3

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


На самом деле я разрабатываю программу в приложении c# windows, и я должен сделать программное обеспечение, где каждый клиент имеет новый уникальный идентификатор с уникальным departmentid.
вот я даю вам дизайн стола-
id cust_name возраст deprtmntname deptid
1----cust1-----25-----тест1----------1
2----cust2-----20-----тест2----------1
3 cust3------35----тест1----------2
==========================================

проблема в том, что всякий раз, когда более 10 пользователей начинают вводить запись, то иногда уникальный идентификатор departmentid дает дубликатные значения. пожалуйста, предложите мне какой-нибудь вариант, чтобы каждый пользователь мог получить уникальный идентификатор вместе с уникальным departmentid. Может быть, есть какой-то вариант с сервера, тогда я использую SQL server 2008 r2.

спасибо

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

squery = " SELECT isnull(max (slno), 0)+1 FROM OPDPatients with (holdlock) where slyear=@year";
cmd1 = new SqlCommand(squery, con);
cmd1.Параметры.AddWithValue ("@year", LoginForm.dtyear.Год);
da = новый SqlDataAdapter(cmd1);
dt = новый DataTable();
да.Заполнить(ДТ);

Philippe Mori

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

Люди, которые пытаются писать код, не изучая базовые вещи, как вы, создают подслушивающее программное обеспечение, потому что они понятия не имеют, что они должны делать.

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Проблема в том, что вы получаете последний использованный идентификатор из базы данных, а затем пытаетесь использовать его без его фактического существования в базе данных.

Как вы обнаружили, в многопользовательской среде вы не можете этого сделать, так как несколько машин могут выполнить этот запрос одновременно и получить один и тот же идентификатор.

Ваше единственное решение состоит в том, чтобы база данных присвоила значение записи для вас. Вы должны использовать поле с автоматической нумерацией. Вы не спрашиваете у базы данных значение. Вы просто сохраняете новую запись с хотя бы минимальным объемом информации, чтобы сохранить данные действительными, не устанавливая значение идентификатора, и компонент database engine назначит вам его. Затем вы получаете ID значение из базы данных, это значение идентификатора, и вы получите значение идентификатора. Вы будете выполнять два запроса, INSERT и SELECT, в одном запросе.

Вы можете найти пример здесь[^]. Подробнее см. Гугл[^].


jitendraintarvo

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

Dave Kreskowiak

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

Рейтинг:
2

OriginalGriff

Не делай этого так.
Сделайте поле ID столбцом идентификатора в БД, и пусть SQL обрабатывает создание уникальных значений.
SQL автоматическое увеличение поля[^]


Рейтинг:
0

Peter Leow

Помимо решений 1 и 2, Если у вас есть определенный формат идентификатора, вы можете изучить его Запросите у своей базы данных этот уникальный идентификатор[^].
Кстати, я заметил, что вы поместили "deprtmntname" в таблицу пользователей, почему? Разве вы не дублируете данные "deprtmntname" каждый раз, когда вставляете нового пользователя? По праву "deprtmntname "и" deptid "должны быть в одной таблице, скажем," dept " сам по себе. Вы должны удалить "deprtmntname "из, Но оставить" deptid "в пользовательской таблице," deptid "пользовательской таблицы будет ссылаться на" deptid " таблицы dept.
Узнайте больше о 1nf, 2NF, 3NF и BCNF в нормализации базы данных[^]

++ + + + [раунд 2]+++++

Цитата:
позвольте мне объяснить вам еще раз, что у меня есть таблица с именем customerdetails здесь я должен предоставить уникальный идентификатор каждому отдельному клиенту и еще один уникальный идентификатор, который я должен предоставить клиенту на основе имени отдела. Каждый пользователь зарегистрирован с регистрационным номером, а также с departmentid, как у меня есть более 20 отделов, я даю вам пример, как dept1, dept2, dept3, dept4.

Чтобы реализовать ваше требование при проектировании реляционных баз данных, у вас есть две сущности здесь, пользователь и отдел, каждая из которых должна иметь свою собственную таблицу, подобную этой:
user table:                                          dept table:
userid | deptid | username | userotherdetails        deptid | deptname |deptotherdea
           V                                            |
           |____________________________________________|

Когда пользователь регистрируется, ему присваивается уникальный идентификатор пользователя, и его значение deptid должно быть получено из допустимого значения из таблицы dept. Чтобы найти имя отдела пользователя, вы свяжете deptid из таблицы user обратно в таблицу dept. Таким образом, задолженность таблицы служит таблица подстановки.
И userid, и deptid являются первичными ключами для соответствующих таблиц.
Если вы не понимаете моего объяснения, то, очевидно, вам придется читать дальше. Введение в проектирование баз данных[^].
Следует отметить, что дизайн базы данных не похож на электронную таблицу excel. Это принципы проектирования, которым следует следовать, чтобы свести к минимуму дублирование, избыточность данных, целостность данных и облегчить последующее манипулирование данными.


jitendraintarvo

спасибо, что дали мне ответ, но без departmntname, как я получу уникальный идентификатор для каждого deprtment. существует более 20 различных отделов. на основе departmentname должен быть сгенерирован deptid. пожалуйста, помогите с этим.
благодарить

Peter Leow

"на основе departmentname deptid должен быть сгенерирован", на каком основании? Какой-нибудь пример?

jitendraintarvo

позвольте мне объяснить вам еще раз, что у меня есть таблица с именем customerdetails здесь я должен предоставить уникальный идентификатор каждому отдельному клиенту и еще один уникальный идентификатор, который я должен предоставить клиенту на основе имени отдела. Каждый пользователь зарегистрирован с регистрационным номером, а также с departmentid, как у меня есть более 20 отделов, я даю вам пример, как dept1, dept2, dept3, dept4.

Peter Leow

ответил в моем решении.