Maison >base de données >tutoriel mysql >Comment transmettre une liste de chaînes à une procédure stockée SQL Server à l'aide d'un type de table défini par l'utilisateur ?
Passer une liste de chaînes à une procédure stockée SQL Server à l'aide d'un type de table défini par l'utilisateur
Lors de l'appel d'une procédure stockée SQL Server à partir de C#, vous devrez peut-être transmettre une liste de chaînes en tant que paramètres. Alors que les paramètres standard suffisent pour gérer des types de données simples, pour les structures de données complexes telles que les listes, une approche plus sophistiquée est requise.
Pour transmettre une liste de chaînes, nous pouvons exploiter la fonctionnalité UDTT (User-Defined Table Type) de SQL Server. Cette fonctionnalité nous permet de créer un type de données personnalisé qui simule une table pour stocker une collection de données.
Créer un type de tableau défini par l'utilisateur
Tout d'abord, nous devons créer un type de table défini par l'utilisateur (UDTT) :
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );</code>
Cet UDTT définit une seule colonne nommée "Item" pour contenir les chaînes.
Modifier la procédure stockée
Ensuite, nous modifions la procédure stockée pour accepter les paramètres UDTT :
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END</code>
Remplir UDTT en C#
En C#, nous utilisons DataTable pour remplir UDTT :
<code class="language-csharp">using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); // ...此处添加循环填充字符串列表到DataTable的代码... SqlParameter pList = new SqlParameter("@list", SqlDbType.Structured); pList.Value = table; }</code>
Transmettre les paramètres UDTT aux procédures stockées
Enfin, on passe les paramètres UDTT à la procédure stockée :
<code class="language-csharp">using (var 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>
Cette approche nous permet de transmettre efficacement une liste de chaînes à une procédure stockée SQL Server.
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!