.Net でのパラメータ化されたクエリの使用は、通常、次の例に示すように特定のパターンに従います。
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID = @categoryid ", conn); comm.Parameters.Add("@categoryid", SqlDbType.Int); comm.Parameters["@categoryid"].Value = CategoryID;
ただし、IN や LIKE などの条件を使用してより複雑なクエリを実行すると、
カンマ区切りの文字列として保存されたカテゴリ ID のリストと、特殊文字が含まれる可能性のある製品名がある場合を考えてみましょう。このシナリオのパラメータ化されたクエリを構築するには:
IN 条件を分解します: カンマ区切りのカテゴリ ID 文字列を整数の配列に変換します。
int[] categoryIDs = Array.ConvertAll(CategoryIDs.Split(','), int.Parse);
パラメータの生成names: 一連のパラメーター名を作成します (例: @p0、@p1、@p2 など)。
string[] parameters = new string[categoryIDs.Length]; for (int i = 0; i < categoryIDs.Length; i++) { parameters[i] = "@p" + i; }
コマンドにパラメーターを追加します。 : 対応するカテゴリ ID をそのパラメータとしてコマンドに追加します。 value.
for (int i = 0; i < categoryIDs.Length; i++) { comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); }
IN 条件を作成します: クエリの IN 句内でパラメータ名をカンマ区切りの文字列に結合します。
WHERE Category_ID IN (" + string.Join(",", parameters) + ")
「いいね」を処理する条件: ワイルドカード文字と入力文字列を使用して、LIKE 条件をパラメータ化します。
OR name LIKE @name
ここで、@name は、入力文字列を値としてコマンドに追加されるパラメータです。
すべてをまとめると、パラメーター化されたクエリは次のようになります。
string Name = "someone"; int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952 }; SqlCommand comm = conn.CreateCommand(); string[] parameters = new string[categoryIDs.Length]; for(int i=0;i<categoryIDs.Length;i++) { parameters[i] = "@p"+i; comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); } comm.Parameters.AddWithValue("@name",$"%{Name}%"); comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN ("; comm.CommandText += string.Join(",", parameters) + ")"; comm.CommandText += " OR name LIKE @name";
Thisこのアプローチでは、適切なパラメータ化で IN 条件と LIKE 条件の両方に対処する、完全にパラメータ化されたクエリを作成します。
以上が.NET で LIKE 条件と IN 条件を含むパラメーター化されたクエリを効果的に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。