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

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

DDD
Libérer: 2025-01-13 09:22:43
original
998 Les gens l'ont consulté

How to Pass a C# String List to a SQL Server Stored Procedure?

Passer la liste à la procédure stockée SQL Server en C#

Question :

Vous devez transmettre la liste des chaînes de votre code C# à la procédure stockée SQL Server. Cependant, cette liste est dynamique et contient des centaines d'éléments.

Solution :

Utiliser les types de tables définis par l'utilisateur (UDTT)

SQL Server 2008 et versions ultérieures proposent des types de tables définis par l'utilisateur (UDTT), vous permettant de créer des types de données personnalisés à utiliser dans des procédures stockées. Veuillez suivre ces étapes :

  1. Créer UDTT : Créez un nouvel UDTT à l'aide d'une instruction SQL similaire à la suivante :
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);</code>
Copier après la connexion
  1. Modifier la procédure stockée : Modifier la procédure stockée pour recevoir UDTT en paramètre :
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- 只返回我们传入的项目
    SELECT l.Item FROM @list l;
END</code>
Copier après la connexion
  1. Remplir un DataTable en C# : Créer un DataTable pour contenir une liste de chaînes :
<code class="language-csharp">using (var table = new DataTable())
{
    table.Columns.Add("Item", typeof(string));

    for (int i = 0; i < 1000; i++) // 假设列表包含1000个项目
    {
        table.Rows.Add("Item " + i);
    }
}</code>
Copier après la connexion
  1. Créer un SqlParameter : Créer un nouveau SqlParameter en utilisant le type UDTT :
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured);
pList.TypeName = "dbo.StringList";
pList.Value = table;</code>
Copier après la connexion
  1. Exécuter la procédure stockée : Exécuter la procédure stockée et récupérer les résultats :
<code class="language-csharp">using (var con = new SqlConnection(connstring))
{
    con.Open();

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

        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}</code>
Copier après la connexion

N'oubliez pas de remplacer connstring par votre propre chaîne de connexion. Cet exemple de code suppose que votre liste contient 1 000 éléments, vous devrez ajuster la boucle en fonction de la taille réelle de la liste. De plus, assurez-vous que votre instance SQL Server a activé l'utilisation du paramètre READONLY.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal