首頁 > 後端開發 > 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板