ホームページ > バックエンド開発 > C++ > C#で配列パラメータをSqlCommandに渡す方法は?

C#で配列パラメータをSqlCommandに渡す方法は?

Patricia Arquette
リリース: 2025-01-26 17:41:14
オリジナル
573 人が閲覧しました

How to Pass Array Parameters to a SqlCommand in C#?

C# で配列パラメータを SqlCommand に渡す

C# で、配列パラメーターを SQL コマンドに渡そうとすると、期待どおりに動作しない問題が発生する可能性があります。根本的な原因は、配列をパラメーターとして SqlCommand に直接追加できないことです。この問題を解決するには、配列内の各値を個別に追加する必要があります。

解決策:

  1. 配列パラメータを定義します:

    必要な名前とデータ型を使用してパラメーターの配列を作成します。

  2. SqlCommand にパラメーターを追加します:

    配列内の値ごとに、新しい SqlParameter オブジェクトを追加し、対応する名前と値を指定します。必要に応じて、適切な SqlDbType とサイズを設定します。

  3. IN 句を置き換えます:

    CommandText の「{parameterNameRoot}」プレースホルダーを、パラメーター名のカンマ区切りリストに置き換えます。

例:

<code class="language-csharp">var parameters = new string[items.Length]; // 此处items应替换为实际的数组变量
var cmd = new SqlCommand();
for (int i = 0; i < items.Length; i++)
{
    cmd.Parameters.AddWithValue("@param" + i, items[i]);
}
cmd.CommandText = cmd.CommandText.Replace("{param}", string.Join(",", Enumerable.Range(0, items.Length).Select(i => "@param" + i)));</code>
ログイン後にコピー

改善された解決策:

改良された再利用可能なソリューションは、拡張メソッドとして実装できます。

<code class="language-csharp">public static class SqlCommandExt
{
    public static SqlParameter[] AddArrayParameters<T>(this SqlCommand cmd, string paramNameRoot, IEnumerable<T> values, SqlDbType? dbType = null, int? size = null)
    {
        var parameters = new List<SqlParameter>();
        var parameterNames = new List<string>();
        var paramNbr = 1;

        foreach (var value in values)
        {
            var paramName = string.Format("@{0}{1}", paramNameRoot, paramNbr++);
            parameterNames.Add(paramName);
            var p = new SqlParameter(paramName, value);
            if (dbType.HasValue)
                p.SqlDbType = dbType.Value;
            if (size.HasValue)
                p.Size = size.Value;

            cmd.Parameters.Add(p);
            parameters.Add(p);
        }

        cmd.CommandText = cmd.CommandText.Replace("{" + paramNameRoot + "}", string.Join(",", parameterNames));

        return parameters.ToArray();
    }
}</code>
ログイン後にコピー

使用法:

<code class="language-csharp">var cmd = new SqlCommand("SELECT * FROM TableA WHERE Age IN ({Age})");
cmd.AddArrayParameters("Age", new int[] { 1, 2, 3 });</code>
ログイン後にコピー

この改良された例ではジェネリックスを使用しているため、より柔軟になり、SqlDbType と Size を指定できるようになります。 また、CommandText 内でパラメータ名を直接結合することによる潜在的なセキュリティ リスクも回避できます。 実際に使用する場合は、TableAAge を実際のテーブル名と列名に置き換えてください。

以上がC#で配列パラメータをSqlCommandに渡す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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