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
Libérer: 2025-01-04 15:55:39
original
458 Les gens l'ont consulté

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

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

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

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());
        }
    }
}
Copier après la connexion

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