#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:
Вот как я это сделал. Как и в вашем примере, каждая запись в базе данных имеет числовой идентификатор. Я получаю минимальный и максимальный идентификатор и создаю список случайных чисел для любого количества записей, которые я хочу. Я исключаю повторяющиеся числа во время этого процесса. Обработка этого в памяти с помощью целочисленного списка намного быстрее, чем повторяющиеся запросы к базе данных. После создания списка уникальных случайных чисел записи извлекаются из базы данных с использованием элементов списка в качестве критериев.
Вы можете добавить дополнительные проверки в случае, если ваши идентификаторы не являются последовательными и для других условий.