1

現時点では、テキストボックスとボタンがあり、テキストボックスを正常に読み取ることができ、データベースで「apple」と検索します

ただし、「赤いリンゴ」という結果がある場合、それは返されません。

私が試してみました

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 演算子を使用する必要があります

たとえば、THE QUERY は次のようになります。

"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 = @FruitNameますWHERE FruitName LIKE @FruitName

于 2013-03-29T15:53:33.057 に答える
1

誰でもSQLインジェクションを実行できるため、これは恐ろしい考えです。あなたはおそらく Sqlcommand.Prepareに似たものが欲しいでしょう

より安全な議論を設定できるようになるためです。そして、2つの言葉を持ってください。

于 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 に答える