#c# #sql #sql-server
#c# #sql #sql-сервер
Вопрос:
Я создал программу, которая позволит пользователям входить в систему и вводить марку / модель / год для автомобилей, которыми они владеют. Я хотел бы случайным образом сгенерировать carId, который будет присвоен каждому автомобилю, добавленному в базу данных. Я создал генератор случайных чисел, используя следующий код:
Random random = new Random();
int CarID = random.Next(10000);
И затем я бы вставил код в базу данных SQL с помощью:
SqlDataSource2.InsertParameters["CarID"].DefaultValue = Convert.ToString(CarID);
Что я хотел бы сделать, так это сначала выполнить поиск в базе данных случайно сгенерированного числа, чтобы убедиться, что оно не существует. Если число действительно существует в базе данных, генератор случайных чисел будет пробовать новое число, пока не найдет то, которого нет в базе данных. Буду признателен за любую помощь, спасибо.
Комментарии:
1. Случайные числа для идентификаторов? Звучит как ожидающая своего часа катастрофа. Что вы будете делать, если случайно получите одно и то же число дважды? Это не совсем неслыханно.
2. Ну, именно поэтому я пытаюсь понять, как проверить наличие существующего номера в базе данных, но, похоже, что идентификаторы GUID — это то, что я ищу.
3. GUID гарантированно (утки за углом) уникальны, так что да, я думаю, это то, что вы ищете. Или вы также можете использовать функцию автоматического увеличения, которая присваивает каждой строке новое целочисленное значение по мере ее создания.
4. Я бы рекомендовал добавить
INT IDENTITY
столбец в вашу таблицу, и пусть база данных автоматически выдает уникальные идентификаторы каждой новой строке — вам больше не придется ни о чем беспокоиться!
Ответ №1:
Почему бы не использовать автоматически увеличивающийся столбец идентификаторов? Или GUID?
Учитывая таблицу со столбцом идентификатора, вы можете использовать это для вставки своих данных и получения нового идентификатора
INSERT INTO Cars
(Make, Model, Year)
VALUES
'Ford', 'Festiva', 1986
SELECT @@IDENTITY
Это фундаментальная особенность всех баз данных SQL, с которой вы захотите ознакомиться. Я бы порекомендовал любую из книг по SQL для начинающих на Amazon в сочетании с SQL для Smarties для некоторых базовых концепций данных SQL.
Комментарии:
1. Потому что я не знаком ни с одним из D:
2. Обновленный ответ, чтобы быть более четким.
3. И если вам нужно выбрать новый идентификатор после вставки, я бы рекомендовал использовать
SCOPE_IDENTITY()
вместо@@IDENTITY
Ответ №2:
Я думаю, что вы ищете идентификатор GUID, а не случайное число. Идентификаторы GUID хранятся как datatype uniqueidentifier в MS SQL Server, и они гарантированно уникальны. Я знаю, меня это тоже поразило. Ознакомьтесь с документацией, если вы мне не верите, но код для вставки строки с идентификатором guid очень прост:
insert into someTable (id, name)
values newid(), 'some name'
Документация по уникальному идентификатору: http://msdn.microsoft.com/en-us/library/ms187942.aspx
Комментарии:
1. Похоже, это то, что я ищу, просто это кажется слишком простым. Спасибо!
2.Заработало с помощью:
Guid messageId = System.Guid.NewGuid();
string CarID = messageId.ToString();
SqlDataSource2.InsertParameters["CarID"].DefaultValue = CarID;
Еще раз спасибо!