Maison > base de données > tutoriel mysql > Comment transmettre efficacement une liste de chaînes de C# à une procédure stockée SQL Server ?

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

Mary-Kate Olsen
Libérer: 2025-01-13 10:50:42
original
322 Les gens l'ont consulté

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

C# et SQL Server : gérer efficacement les listes de chaînes dans les procédures stockées

Un défi courant lors de l'interaction avec les procédures stockées SQL Server à partir de C# consiste à transmettre des listes dynamiques de valeurs de chaîne. Cet article présente une solution robuste utilisant les types de tables définis par l'utilisateur (UDTT).

Le problème : les listes de chaînes dynamiques

Imaginez une procédure stockée devant filtrer les résultats en fonction d'une liste de chaînes de longueur variable. Passer directement cette liste peut être problématique.

Solution : types de tables définis par l'utilisateur (UDTT)

SQL Server 2008 et les versions ultérieures proposent les UDTT comme solution élégante. Nous allons créer un UDTT appelé StringList pour encapsuler notre collection de chaînes.

Création de la procédure stockée

Cette procédure stockée utilise le type StringList :

<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Retrieve and return items from the input list
    SELECT l.Item FROM @list l;
END</code>
Copier après la connexion

Implémentation C#

Le code C# ci-dessous montre comment utiliser cette procédure stockée :

<code class="language-csharp">using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        // Create a DataTable to hold the string list
        using (var table = new DataTable())
        {
            table.Columns.Add("Item", typeof(string));

            // Add sample data – replace with your actual list
            for (int i = 0; i < 10; i++)
            {
                table.Rows.Add("String" + i);
            }

            // Add the DataTable as a parameter to the command.
            SqlParameter tvpParam = cmd.Parameters.AddWithValue("@list", table);
            tvpParam.SqlDbType = SqlDbType.Structured;
            tvpParam.TypeName = "dbo.StringList";

            // Execute the command.
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                // Process the results
                while (reader.Read())
                {
                    Console.WriteLine(reader["Item"].ToString());
                }
            }
        }
    }
}</code>
Copier après la connexion

Exemple d'exécution SSMS

Pour les tests dans SQL Server Management Studio (SSMS) :

<code class="language-sql">DECLARE @list AS StringList;

INSERT INTO @list VALUES ('Apple'), ('Banana'), ('Orange');

EXEC sp_UseStringList @list;</code>
Copier après la connexion

Cette approche fournit une méthode propre et efficace pour transmettre des listes de chaînes de C# aux procédures stockées SQL Server, en tirant parti de la puissance des UDTT pour le transfert de données structurées. N'oubliez pas de remplacer "dbo.StringList" par le schéma et le nom corrects si vous les avez modifiés.

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