Извлечение случайных данных из базы данных sql без повтора

#c# #sql

#c# #sql

Вопрос:

Привет, я создаю программу, в которой при загрузке формы случайные данные будут извлекаться из базы данных, и моя проблема заключается в том, что код не повторяет данные снова. я использую vb 2008 и базу данных sql, язык программирования: C#

например:

 Data in Database

Word_ID | Word
1 | eye
2 | cheese
3 | mouse
  

Затем форма загружается, она извлекает случайные данные и отображается в метке

пример вывода:

сыр

так что сыр теперь не будет отображаться при следующем случайном

мой код:

 SqlConnection conn =
new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=C:UserssonyDocumentsVisual Studio 2008ProjectsHangman_FinalHangman_Finalhangman_db.mdf;Integrated Security=True;User Instance=True");

conn.Open();

SqlCommand command = conn.CreateCommand();
command.CommandText = "SELECT TOP 1 Words from word order by NEWID()";
command.CommandType = CommandType.Text;

SqlDataReader reader = command.ExecuteReader();

// display the results
while (reader.Read())
{
    string output = reader["Words"].ToString();
    label5.Text = output;
}

// close the connection
reader.Close();
conn.Close();
  

Комментарии:

1. И ваш вопрос …?

2. Сколько слов в базе данных? В зависимости от записей было бы надежнее кэшировать слова и удалять их по мере необходимости, гарантируя, что вы никогда не получите дубликат. в противном случае вам нужно будет протестировать WHERE word_id NOT IN (already found IDs)

3. Адриан и Дэрил Тео — вопрос в том, как я могу предотвратить повторение данных Brad — у меня 40 слов в базе данных

Ответ №1:

Сохраняйте слова в List<String> . Получите элемент со случайным индексом из списка, распечатайте его и удалите.

Комментарии:

1. У меня всегда есть то же решение, что и у вас, мистер АВД, и вы всегда быстрее. ^_^

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

Ответ №2:

Это просто вопрос включения слова, которое было только что загружено как ‘and WORD <> ‘PreviousWord» в предложении where оператора you select?

Комментарии:

1. Вам нужно будет отслеживать все предыдущие слова с помощью этого метода, а не только последнее.

Ответ №3:

Предполагая, что вы сохраняете слова вместе с целочисленным индексом в таблице базы данных, почему бы не сгенерировать случайное число (между максимальным числом / индексом слов, которые у вас есть) в C # (используя Random), а затем получить слово, соответствующее индексу.

Ответ №4:

Сохраните слова в коллекции и посчитайте их. Тогда используйте Random? Но это зависит от того, сколько слов у вас есть в базе данных.

Ответ №5:

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

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