Как мне выполнить поиск существующего значения в базе данных SQL?

#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; Еще раз спасибо!