即使有足够的SQL-Query也找不到行

时间:2012-08-27 10:24:10

标签: c# sql mysql-connector

我正在为自己的网站写一个小型的webcrawler。它似乎工作正常。我浏览了每个链接并检查它是否属于我的主页。如果找到了链接,则会使用“addSite()”添加该网站。这首先尝试获取URl相同的条目,如果没有任何条目,则添加URl。否则,如果内容哈希发生更改,则会更新它。问题是即使它存在,它也会添加URl。

这是我的方法:

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;
}

我希望有人能找到失败的人。非常感谢你。

2 个答案:

答案 0 :(得分:2)

如果有一个你不想重复的fiedl。为什么不将数据库字段设置为唯一。并在程序中捕获错误或在存在时按照您的意愿执行操作。如果db允许它进入。那么字符串就不同了大写字母或空格等。

答案 1 :(得分: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;
}