Maison >développement back-end >C++ >Comment transmettre une liste de chaînes C# à la clause IN d'une procédure stockée SQL Server ?

Comment transmettre une liste de chaînes C# à la clause IN d'une procédure stockée SQL Server ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 15:55:39463parcourir

How to Pass a C# String List to an SQL Server Stored Procedure's IN Clause?

Transmission de listes aux procédures stockées SQL Server à partir de C#

Dans le code C# donné, une procédure stockée est invoquée avec diverses valeurs de paramètres, y compris une liste de chaînes. Cependant, la requête dans la procédure stockée nécessite que la liste soit transmise dans le cadre de la clause IN.

Solution : Utilisation des types de tables définis par l'utilisateur (SQL Server 2008)

SQL Server 2008 a introduit les types de tables définis par l'utilisateur, une fonctionnalité qui permet de transmettre des collections de données aux procédures stockées de manière structurée. Voici comment mettre en œuvre cette solution :

1. Créer un type de table défini par l'utilisateur

Créez un type de table qui correspond à la liste des chaînes. Par exemple :

CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);

2. Modifier la procédure stockée

Adapter la procédure stockée pour accepter le type de table comme paramètre d'entrée :

CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Query using the table type
    SELECT l.Item FROM @list l;
END

3. Remplissez le type de table en C#

En C#, créez un objet DataTable et remplissez-le avec la liste des chaînes. Ensuite, définissez un paramètre pour transmettre le DataTable à la procédure stockée.

using (var table = new DataTable())
{
    table.Columns.Add("Item", typeof(string));

    for (int i = 0; i < 10; i++)
        table.Rows.Add("Item " + i.ToString());

    var pList = new SqlParameter("@list", SqlDbType.Structured);
    pList.TypeName = "dbo.StringList";
    pList.Value = table;

    cmd.Parameters.Add(pList);
}

4. Exécuter la procédure stockée

Exécuter la procédure stockée avec l'objet SqlParameter renseigné.

Exemple d'utilisation :

using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}

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!

Déclaration:
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