2014-03-02 30 views
0

我正在编写Web爬虫程序。所有链接都存储在MySQL数据库中。由于我将在多个节点上运行爬网程序,因此我需要尽快将URL设置为“正在爬网”,以保持高效。MySQL - 更新我正在选择的相同记录

我的网络爬虫是用C#编写的。现在,它下载URL和ID,然后将URL设置为使用ID进行爬网。问题是需要2个不同的查询。有什么方法可以将它们结合在一起吗?

这里是我当前的代码:

string stm = "SELECT * FROM pages WHERE IsCrawled = 0 LIMIT 1;"; 
MySqlCommand cmd = new MySqlCommand(stm, conn); 
cmd.ExecuteScalar(); 
id = -1; 
using (rdr = cmd.ExecuteReader()) 
{ 
    if (rdr.Read()) 
    { 
     URL = rdr.GetString(1); 
     id = rdr.GetInt32(0); 
    } 
} 
MySqlCommand update = new MySqlCommand("UPDATE pages SET IsCrawled = 1 WHERE ID = '"+id+"'", conn); 
update.ExecuteScalar(); 

同样,我想查询相结合。

+0

'Convert.ToString'返回'string'。如果你想使用它的返回值,你应该顺便给它一个_string reference_。 –

+0

修好了,谢谢。 – user1599078

+0

我想如果你使用orm(linq,ado.net等),你可以做你正在问的东西。使用这种方法,我认为你运气不好。 – horace

回答

0

要执行更新并将其全部选中,您可以执行此操作,但是,我不确定您是否可以在程序流程的上下文中完成此项工作。

UPDATE pages SET IsCrawled = 1 WHERE ID IN 
(SELECT ID FROM pages WHERE IsCrawled = 0 LIMIT 1;) 
+0

会改变ID为*打破它?我认为是这样,但如果我无法获得其他领域,这对我来说并不重要。 – user1599078