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

Comment transmettre une liste de chaînes à une procédure stockée SQL Server à partir de C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 00:53:40328parcourir

How to Pass a List of Strings to a SQL Server Stored Procedure from C#?

Passer une liste de chaînes à une procédure stockée en C#

Lors de l'appel d'une procédure stockée SQL Server à partir de C#, transmettre une liste de chaînes en tant que paramètre peut être difficile. Cependant, il existe une solution utilisant la fonctionnalité UDTT (User Defined Table Type) dans SQL Server 2008 et versions ultérieures.

Création de l'UDTT

Tout d'abord, créez un UDTT pour représentent la liste des chaînes :

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

Modifier le stocké Procédure

Dans la procédure stockée, déclarer l'UDTT en paramètre :

CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Just return the items we passed in
    SELECT l.Item FROM @list l;
END

Remplir l'UDTT en C#

En C# , créez un DataTable et ajoutez une colonne de type string nommée "Item":

using System.Data;
using System.Data.SqlClient;

...

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

Remplissez le DataTable avec la liste des chaînes :

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

Créer un SqlParameter pour transmettre le DataTable en tant qu'UDTT :

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

Passer la liste à la procédure stockée

Ajoutez le SqlParameter au SqlCommand et exécutez le procédure :

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

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        cmd.Parameters.Add(pList);

        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}

Cette approche vous permet de transmettre une liste de chaînes à une procédure stockée dans un format structuré, permettant des requêtes complexes.

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