Maison > développement back-end > C++ > Comment passer les paramètres du tableau à un SQLCommand en C #?

Comment passer les paramètres du tableau à un SQLCommand en C #?

Patricia Arquette
Libérer: 2025-01-26 17:41:14
original
573 Les gens l'ont consulté

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

Passer les paramètres du tableau à SqlCommand en C#

En C#, lorsque vous essayez de transmettre des paramètres de tableau à une commande SQL, il peut y avoir un problème qui ne fonctionne pas comme prévu. La cause première est que les tableaux ne peuvent pas être ajoutés directement en tant que paramètres à SqlCommand. Pour résoudre ce problème, chaque valeur du tableau doit être ajoutée individuellement.

Solution :

  1. Définir les paramètres du tableau :

    Créez un tableau de paramètres avec les noms et types de données requis.

  2. Ajouter des paramètres à SqlCommand :

    Pour chaque valeur du tableau, ajoutez un nouvel objet SqlParameter et spécifiez le nom et la valeur correspondants. Si nécessaire, définissez le SqlDbType et la taille appropriés.

  3. Remplacer la clause IN :

    Remplacez l'espace réservé "{parameterNameRoot}" dans CommandText par une liste de noms de paramètres séparés par des virgules.

Exemple :

<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>
Copier après la connexion

Solution améliorée :

Une solution améliorée et réutilisable peut être mise en œuvre comme méthode d'extension :

<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>
Copier après la connexion

Utilisation :

<code class="language-csharp">var cmd = new SqlCommand("SELECT * FROM TableA WHERE Age IN ({Age})");
cmd.AddArrayParameters("Age", new int[] { 1, 2, 3 });</code>
Copier après la connexion

Cet exemple amélioré utilise des génériques, ce qui le rend plus flexible et permet de spécifier SqlDbType et Size. Cela évite également le risque de sécurité potentiel lié à l’épissage des noms de paramètres directement dans CommandText. N'oubliez pas que lors de l'utilisation réelle, remplacez TableA et Age par les noms réels de vos tables et colonnes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal