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!