1

目前我有一个文本框和一个按钮,我可以很好地阅读文本框,它会在数据库中搜索说“苹果”

但如果有一个名为“红苹果”的结果,它不会返回它。

我试过了

string getTheBox = (this.searchBox.Text);

string request = "%" +  getTheBox + "%";

但这似乎不起作用。这是因为“请求”是字符串变量。

编辑以包括 SQL 请求部分

SqlDataSource2.SelectCommand = "SELECT Recipe_Name FROM New_Recipe WHERE      [ingredient1]=@request

   SqlDataSource2.SelectParameters.Add(newParameter("request",System.TypeCode.String));
        SqlDataSource2.SelectParameters["request"].DefaultValue = request;
4

4 回答 4

6

%的添加是正确的,但是你需要改变你的sql查询

您需要使用LIKE 运算符

例如,查询可能是

"SELECT Recipe_Name FROM New_Recipe WHERE ingredient1 LIKE @request"

和你的代码

   string request = "%" +  getTheBox + "%";
   string sqlText = "SELECT Recipe_Name FROM New_Recipe WHERE ingredient1 LIKE @request";
   using(SqlConnection cn = GetSqlConnection())
   {
       cn.Open();
       using(SqlCommand cmd = new SqlCommand(sqlText, cm);
       {
            cmd.Parameters.AddWithValue("@request", request);
            SqlDataReader dr = cmd.ExecuteReader();
            while(dr.Read())
            {
             ......
            }
       }
   }
于 2013-03-29T15:52:51.713 回答
3

请也发布您的 SQL 查询。也许您需要更改WHERE FruitName = @FruitNameWHERE FruitName LIKE @FruitName

于 2013-03-29T15:53:33.057 回答
1

这是一个可怕的想法,因为任何人都可以运行 sql 注入。您可能想要类似于 Sqlcommand.Prepare的东西

因为它可以让你设置更安全的争论。并有两个字。

于 2013-03-29T15:53:06.580 回答
0

我通常有一些辅助函数可以根据我的需要添加到我的查询中。

public List<T> GetRecipesThatContain<T>(string ingredient)
{
    const string commandText = "SELECT Recipe_Name FROM New_Recipe WHERE ingredient1 LIKE @SearchTerm";
    var searchTerm = Contains(ingredient);

    using(var connection = GetSqlConnection())
    {
        connection.Open();

        using(var command = new SqlCommand(commandText, connection);
        {
            command.Parameters.AddWithValue("@SearchTerm", searchTerm);

            using(var reader = command.ExecuteReader())
            {
                var results = new List<T>();

                while(reader.Read())
                {
                    // Get results
                    // results.Add(result);
                }

                return results;
            }
        }
    }
}

private string StartsWith(string searchTerm)
{
    return string.Format("{0}%", searchTerm);
}

private string EndsWith(string searchTerm)
{
    return string.Format("%{0}", searchTerm);
}

private string Contains(string searchTerm)
{
    return string.Format("%{0}%", searchTerm);
}
于 2013-03-29T16:28:20.367 回答