2013-07-09 139 views
1

我有一個while循環,它繼續從查詢中提取數據,直到查詢不返回任何結果,在此循環內爲每個循環填充每個返回的數據到一個xml文件。 查詢具有每查詢500個結果的限制,所以我要回500個結果再次進行填充和查詢下一個500,直到查詢返回代碼< 1(無結果)如何在while循環中使用foreach循環

我跟蹤的ID,並使用該在查詢中獲取邏輯,但是一旦前500個結果返回,循環不會獲得下一個500.

我在做什麼錯?

代碼:

bool is_finished = false; 
while (is_finished == false) 
{ 
    string current_id = "0"; 
    sb.Append("<queryxml><entity>Account</entity><query><field>AccountNumber<expression op='greaterthan'>" + current_id + "</expression></field></query></queryxml>").Append(System.Environment.NewLine); 
    var r = client.query(at_integrations, sb.ToString()); 
    if (r.ReturnCode == 1) 
    { 

     foreach (var item in r.EntityResults) // max EntityResults 500 per query 
     { 
      Account acct = (Account)item; 
      //create xml file with the results 
      current_id = acct.id.ToString(); 
     } 
    } 
    else 
    { 
     is_finished = true; 
    } 
} 
+0

'ReturnCode!= 1'? –

+0

是的抱歉,我把<1,但是當沒有結果返回它實際上是-1 – user2561466

回答

1

你有你的循環中的current_id定義,每個迭代將其置零。

你應該調試這一點,你可以很輕鬆地添加Debug.WriteLine(sb);看到的內容,你會看到,它總是會返回相同的(注意,current_id始終爲0):

<queryxml><entity>Account</entity><query><field>AccountNumber<expression op='greaterthan'>0</expression></field></query></queryxml> 

下面是更新後的代碼,它只是將current_id的定義移出循環,以便它可以更新並且值將會保持不變。

bool is_finished = false; 
string current_id = "0"; 
while (is_finished == false) 
{ 
    sb.Append("<queryxml><entity>Account</entity><query><field>AccountNumber<expression op='greaterthan'>" + current_id + "</expression></field></query></queryxml>").Append(System.Environment.NewLine); 
    var r = client.query(at_integrations, sb.ToString()); 
<snip> 
+0

謝謝你糾正這個愚蠢的錯誤,但我仍然沒有看到返回下一個500結果,但current_id確實隨每個循環而改變,但是一旦循環關閉時會返回前500個結果 – user2561466