2011-10-07 139 views
0

嗨創建一個程序,當表單加載隨機數據將從數據庫中檢索,我的問題是不重複數據的代碼。用vb 2008和SQL數據庫 IM, 編程語言:C#從sql數據庫檢索隨機數據不重複

例如:

Data in Database 

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

然後形成其加載將檢索隨機數據並顯示在標籤

示例輸出:

奶酪

所以奶酪現在不會顯示在下一個隨機

我的代碼:

SqlConnection conn = 
new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\sony\Documents\Visual Studio 2008\Projects\Hangman_Final\Hangman_Final\hangman_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

而你的問題是......? –

+1

這是什麼問題? –

+2

數據庫中有多少個單詞?根據條目的不同,緩存單詞並在需要時彈出它們會更加可靠,從而確保您永遠不會重複。否則,您將需要測試'WHERE word_id NOT IN(已找到ID)' –

回答

2

將詞彙存儲到List<String>。從列表中獲取隨機索引中的元素,將其打印並刪除。

+1

我總是有同樣的解決方案,您先生,並且您總是更快。^ _^ – Bastardo

+0

此方法的效率將取決於DB中的單詞數量以及此列表將從DB重新加載的頻率 –

0

難道僅僅是一個包括剛裝的「和字<>「PreviousWord」 where子句中的選擇語句字的事?

+0

您需要使用此方法追蹤之前的所有單詞,而不僅僅是最後一個單詞。 –

0

假設您要在數據庫表中存儲單詞和整數索引,爲什麼不在C#中(使用隨機)生成一個隨機數(在您擁有的最大數/索引之間),然後獲取該單詞匹配索引。

0

將單詞存儲在一個集合中並對其進行計數。然後使用隨機?但這取決於你在數據庫中有多少單詞。

0

下面是我如何做到這一點。就像你的例子一樣,數據庫中的每個記錄都有一個數字ID。我得到最小和最大ID併爲我想要的任何數量的記錄構建一個隨機數列表。我在這個過程中排除重複的數字。用整數列表處理內存比重複數據庫查詢要快得多。一旦創建了唯一隨機數字列表,則使用列表成員作爲條件從數據庫中提取記錄。

如果您的身份證件不符合順序和其他條件,您可以添加額外的檢查。