ホームページ > データベース > mysql チュートリアル > .NET SQL クエリで LIKE 条件と IN 条件をパラメータ化するにはどうすればよいですか?

.NET SQL クエリで LIKE 条件と IN 条件をパラメータ化するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-31 09:53:09
オリジナル
156 人が閲覧しました

How to Parameterize LIKE and IN Conditions in .NET SQL Queries?

LIKE 条件と IN 条件を使用したパラメーター化されたクエリ

.NET プログラミングの世界では、パラメーター化されたクエリは通常、簡単に設定できます。ただし、複数の値が関係する複雑な条件を扱う場合には問題が発生します。

IN 条件と LIKE 条件の両方を含む次のクエリを考えてみましょう。

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID IN (@categoryids) 
      OR  name LIKE '%@name%'
", 
   conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
ログイン後にコピー

この場合、CategoryIDs はカンマで区切られた数値のリスト。名前は特殊文字を含む文字列です。課題は、これらの値を正しくパラメータ化することにあります。

解決策

この問題に取り組むために、パラメータ名 @p0 から @pN-1 のシーケンスを構築します。ここで N配列内のカテゴリ ID の数です。次に、各名前のパラメータを作成し、対応するカテゴリ ID を値として割り当てます。

LIKE 条件の場合、文字列連結を使用して、@name を含むあいまい検索式を構築します。

これはプロセスを説明する例:

string Name = "someone";
int[] categoryIDs = new int[] { ... };

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";
ログイン後にコピー

この完全にパラメーター化されたクエリにより、複雑な条件を処理する際のセキュリティと柔軟性が確保されます。この例では配列を使用していますが、この手法は値の任意のコレクションに適用できます。

以上が.NET SQL クエリで LIKE 条件と IN 条件をパラメータ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート