2013-07-09 96 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