MySQL查询不返回值,但存在于DB中

时间:2013-12-10 17:53:59

标签: c# mysql

我有一个时髦的问题..我有这个代码:

using (MySqlCommand cmd = new MySqlCommand())
{
    cmd.Connection = this.connection;
    cmd.CommandText = "SELECT id FROM links WHERE url LIKE '@url'";
    cmd.Parameters.AddWithValue("@url", parent_url.Trim());
    cmd.Prepare();

    using (MySqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            parent_id = reader.GetInt32(0);
        }
    }
}

我的问题是什么..有时候,当数据库中有答案时,它不会返回值。这很奇怪。另外我注意到数据库中的一些项目背后有空间,所以这就是我这样做的原因:

    using (MySqlCommand cmd = new MySqlCommand())
    {
        cmd.Connection = this.connection;
        cmd.CommandText = "SELECT id FROM links WHERE url LIKE '@url'";
        cmd.Parameters.AddWithValue("@url", parent_url.Trim());
        cmd.Prepare();

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                parent_id = reader.GetInt32(0);
            }
        }
    }

    if(parent_id == 0)
    {
        using (MySqlCommand cmd = new MySqlCommand())
        {
            cmd.Connection = this.connection;
            cmd.CommandText = "SELECT id FROM links WHERE url LIKE '@url '";
            cmd.Parameters.AddWithValue("@url", parent_url.Trim());
            cmd.Prepare();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    parent_id = reader.GetInt32(0);
                }
            }
        }
    }

但它有时候仍然没有帮助我......即使该项目之后没有空格。 所以,是的..你们可以请给我一些建议......我应该尝试一下。

2 个答案:

答案 0 :(得分:2)

"SELECT id FROM links WHERE url LIKE @url";

从参数中删除'',然后只将其视为参数

否则它只是一个等于@url

的字符串值

如果您需要在数据库列上搜索给定字符串,请使用%,如下所示

cmd.Parameters.AddWithValue("@url", "%" + parent_url.Trim()+ "%");

<强>更新

你可以使用下面的修剪功能

"SELECT id FROM links WHERE trim(url) LIKE @url";

答案 1 :(得分:0)

您的第一个问题是引用参数占位符。通过这种方式,解析引擎无法将占位符链接到参数。

所以你很容易解决

"SELECT id FROM links WHERE url LIKE @url";

但这还不足以解决网址列末尾的空格问题。

您可以使用MySql Workbench的此脚本修复额外的空间问题,以便永久删除URL列末尾的空白。

update links
set url = rtrim(url) 
where url like '% '

没有测试,请备份。