LIKE 条件と IN 条件を使用したパラメータ化されたクエリ
.Net のパラメータ化されたクエリでは、通常、特定のパラメータ名を使用し、これらのパラメータに値を追加します。ただし、複数のパラメータ値または動的なパラメータ値が必要になる可能性がある IN や LIKE などの条件を扱う場合、構文はより複雑になる可能性があります。
具体的なパラメータについて説明します。質問:
クエリ:
SELECT * FROM Products WHERE Category_ID IN (@categoryids) OR name LIKE '%@name%'
パラメータ:
変更された構文:
作成するには完全にパラメータ化されたクエリでは、IN 条件のパラメータ名と値を動的に構築する必要があります。これは、ループを使用して実現できます:
int[] categoryIDs = ...; string Name = ...; SqlCommand comm = ...; 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}%");
変更されたクエリ テキスト:
生成されたパラメータ名を IN 条件に連結します:
WHERE Category_ID IN (@p0, @p1, ...)
最終的なクエリ テキストは次のようになります:
SELECT * FROM Products WHERE Category_ID IN (@p0, @p1, ...) OR name LIKE @name
このアプローチ各CategoryIDが個別にパラメータ化され、LIKE条件も適切なパターン構文でパラメータ化されることが保証されます。クエリを完全にパラメータ化することで、SQL インジェクションを防止し、パフォーマンスを向上させます。
以上が.NET クエリで LIKE 条件と IN 条件をパラメータ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。