我有一个时髦的问题..我有这个代码:
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);
}
}
}
}
但它有时候仍然没有帮助我......即使该项目之后没有空格。 所以,是的..你们可以请给我一些建议......我应该尝试一下。
答案 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 '% '
没有测试,请备份。