【问题标题】:SQL-Query doesn't find rows even there are enough [closed]即使有足够的行,SQL-Query 也找不到 [关闭]
【发布时间】:2012-08-27 10:24:09
【问题描述】:

我正在为我自己的网站编写一个小的网络爬虫。它似乎工作正常。我浏览了每个链接并检查它是否属于我的主页。如果找到链接,它会使用“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;
}

我希望任何人都能找到失败之处。非常感谢。

【问题讨论】:

  • 你检查过你的C#代码生成的sql语句吗?它是什么 ?您是否尝试在数据库管理器中执行它?
  • 如果在 sql server 上。您可以使用 sql profiler 查看生成的确切查询。
  • 非常感谢。这是数据库设计中的错误。 url 空间不足,被剪掉了。

标签: c# sql mysql-connector


【解决方案1】:

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

【讨论】:

  • 因为我必须检查内容是否发生了变化。我可以在一个查询中完成所有操作,但首先我想让它工作。小查询作为大查询更容易调试;)。
【解决方案2】:

我不确定,但也许您必须添加其他内容:

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

【讨论】:

  • 没有。因为在 IF-Block 总会有回报。 :(
  • Vielen Dank für eure Hilfe。 Es war ein dummer Fehler。 Und zwar habe ich der URl nicht genug Platz gegeben und sie wurde abgeschnitten。
猜你喜欢
  • 1970-01-01
  • 2015-03-22
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多