2011-10-07 12 views
0

안녕하세요, 폼을 무작위로 데이터를로드 할 때 데이터베이스에서 검색하고 내 문제는 다시 데이터를 반복하지 않는 코드입니다 프로그램을 만드는 중입니다. 비주얼 베이직 2008 및 SQL 데이터베이스를 사용 메신저, 프로그래밍 언어 : 예를 들어 C#SQL 데이터베이스에서 무작위 데이터 가져 오기 반복 없음

:

Data in Database 

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

가 그런 부하를 형성

이 레이블에

예를 들어 출력을 임의의 데이터 표시를 검색합니다 :

치즈

이제 치즈는 다음 무작위로 표시되지 않습니다

내 코드 : 당신이 문을 선택의 단지 where 절에 'A'와 WORD <> 'PreviousWord'으로로드 된 단어 등의 문제

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

나는 항상 당신과 같은 솔루션을 가지고 있습니다. Mr.AVD 그리고 당신은 언제나 더 빠릅니다.^_^ – Bastardo

+0

이 방법의 효율성은 DB에있는 단어의 양과이 목록이 DB에서 얼마나 자주 다시로드되는지에 달려 있습니다 –

0

인가?

+0

마지막 단어뿐만 아니라이 방법으로 이전 단어를 모두 추적해야합니다. –

0

데이터베이스 테이블에 정수 인덱스와 함께 단어를 저장한다고 가정하고 C# (난수를 사용)에서 난수 (최대 수/색인 수) 사이의 난수를 생성 한 다음 단어를 가져 오는 것이 어떻겠습니까? 색인과 일치합니다.

0

단어를 컬렉션에 저장하고 계산하십시오. 그런 다음 무작위를 사용 하시겠습니까? 그러나 이것은 데이터베이스에 얼마나 많은 단어가 있는지에 달려 있습니다.

0

다음은이 작업을 수행 한 방법입니다. 예제에서와 같이 데이터베이스의 각 레코드에는 숫자 ID가 있습니다. 최소 ID와 최대 ID를 얻고 원하는 레코드 수에 상관없이 난수 목록을 만듭니다. 이 과정에서 중복 번호를 제외합니다. 정수 목록을 사용하여 이것을 메모리에서 처리하는 것은 반복되는 데이터베이스 쿼리보다 훨씬 빠릅니다. 고유 난수 목록이 작성되면 목록의 구성원을 기준으로 레코드가 데이터베이스에서 가져옵니다.

ID가 순차적이지 않은 경우와 다른 조건을 위해 추가 검사를 추가 할 수 있습니다.

관련 문제