2012-08-27 52 views
2

我正在爲自己的網站編寫一個小webcrawler。它似乎工作正常。我瀏覽每個鏈接並檢查它是否屬於我的主頁。如果找到鏈接,它將添加「addSite()」的網站。首先嚐試獲取URl相同的條目,如果沒有任何條目添加URl。否則,如果內容哈希值更改,則會更新它。問題是,即使它存在,它也會添加UR1。即使有足夠的SQL查詢也找不到行

這是我的方法:

private bool addSite(string url, string title, string content) 
{ 
    string hash = md5Hash(content); 
    List<object[]> res = sql.executeReader(string.Format("SELECT `hash` FROM `sites` WHERE `url` = '{0}'", MySqlHelper.EscapeString(url))); 
    if (res.Count > 0) 
    { 
     if (res[0][0].ToString() != hash) 
     { 
      sql.executeQuery(string.Format("UPDATE `sites` SET title = '{0}', content = '{1}', hash = '{2}' WHERE url = '{3}'", MySqlHelper.EscapeString(title), MySqlHelper.EscapeString(content), hash, MySqlHelper.EscapeString(url))); 
      return true; 
     } 
     return false; 
    } 
    sql.executeQuery(string.Format("INSERT INTO `sites`(url, title, hash, content) VALUES('{0}', '{1}', '{2}', '{3}')", MySqlHelper.EscapeString(url), MySqlHelper.EscapeString(title), hash, MySqlHelper.EscapeString(content))); 
    Console.WriteLine("Added: " + url); 
    return true; 
} 

我希望每個人都可以找到故障。非常感謝你。

+0

你有沒有檢查你的C#代碼生成的sql語句?它是什麼 ?你是否試圖在你的數據庫管理器中執行它? – SidAhmed

+0

如果在SQL Server上。你可以使用sql profiler查看生成的確切查詢。 – soynerdito

+0

非常感謝。這是數據庫設計中的一個錯誤。該網址沒有足夠的空間並被剪下。 – David

回答

2

如果有fiedl你不想重複。爲什麼不設置數據庫字段是唯一的。並在您的程序中捕獲錯誤或根據您的需要進行操作。如果DB允許它去那麼字符串是大寫字母或空間的不同,等

+0

因爲我必須檢查內容是否已更改。我可以在一個查詢中完成所有操作,但首先我想讓它工作。小查詢更容易作爲大查詢進行調試;)。 – David

1

我不知道,但也許你有別的補充:

private bool addSite(string url, string title, string content) 
    { 
     string hash = md5Hash(content); 
     List<object[]> res = sql.executeReader(string.Format("SELECT `hash` FROM `sites` WHERE `url` = '{0}'", MySqlHelper.EscapeString(url))); 
     if (res.Count > 0) 
     { 
      if (res[0][0].ToString() != hash) 
      { 
       sql.executeQuery(string.Format("UPDATE `sites` SET title = '{0}', content = '{1}', hash = '{2}' WHERE url = '{3}'", MySqlHelper.EscapeString(title), MySqlHelper.EscapeString(content), hash, MySqlHelper.EscapeString(url))); 
       return true; 
      } 
      return false; 
     } 
     else 
     { 
      sql.executeQuery(string.Format("INSERT INTO `sites`(url, title, hash, content) VALUES('{0}', '{1}', '{2}', '{3}')", MySqlHelper.EscapeString(url), MySqlHelper.EscapeString(title), hash, MySqlHelper.EscapeString(content))); 
      Console.WriteLine("Added: " + url);  
     } 
    return true; 
} 
+0

不可以。因爲在IF座上總會有回報。 :( – David

+0

Vielen Dankfüreure Hilfe。Es war ein dummer Fehler。Und zwar habe ich der URl nicht genug Platz gegeben und sie wurde abgeschnitten。 – David

相關問題