2014-04-19 3 views
-1

문제가 있습니다. 그래서 문제가 생기면 if-query가 작동하지 않습니다. 그는 항상 else 경로로 뛰어들 것이다. 그러나 데이터베이스에 데이터베이스의 항목이 존재하지만 왜 그는 항상 다른 경로에 뛰어 ...reader.Read()는 항상 비어 있지만 ... 이유는 무엇입니까?

 Jump: 
      string query = "SELECT * FROM `depositRequests` LIMIT 1"; 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      MySqlDataReader reader = cmd.ExecuteReader(); 
      Thread.Sleep(1000); 
      reader.Read(); 

      Log.Info("Durchlauf: " + i); 

      if (reader.Read()) 
      { 
       SteamID SteamAddID = new SteamID(reader.GetString(2)); 
       string authCode = reader.GetString(3); 

       Log.Info("SteamAddID: " + SteamAddID); 
       Log.Info("AuthCode: " + authCode); 
       Bot.log.Success("Add SteamAddID: " + SteamAddID + "AuthCode: " + authCode); 

       AddFriendForTrade(SteamAddID, authCode); 
      } 
      else 
      { 
       Bot.log.Warn("No Data found! Waiting for Deposit Request"); 
       Thread.Sleep(60000); 
       reader.Close(); 
       i++; 
       goto Jump; 
      } 

항목입니다, 그래서 빈 밤은?

도움 주셔서 감사합니다.

+0

' Thread.Sleep (1000); [**'점프하다 '**] (http://xkcd.com/292/) 더 나은 대안이 있습니다 :'while (true) {...; if (condition) break; ...}'또는'while (true) {...; if (condition) return; ...}'. –

답변

4

당신이 다음이 줄에 if 문 앞에 그것을 읽는 만 하나 기록을지고 있기 때문에이 :

Thread.Sleep(1000); 
reader.Read(); <--- 

에는 두 번째 레코드가 없기 때문에, Read에 두 번째 호출은 항상 거짓를 반환합니다.

이 줄을 제거하고 if 성명에서 한 번만 Read 전화를 걸거나 Read 방법의 결과를 저장하고 내에서 그 변수를 사용한다 if :

당신이 해결하고자하는 문제의 어떤 종류의
bool isRecordExists = reader.Read(); 
if(isRecordExists) 
{ 
    ... 
} 
+0

OMG! 고마워 ... 나는 그것을 보지 못했다! – InDerectif

관련 문제