Transmission de listes aux procédures stockées SQL Server à partir de C#
Dans le code C# donné, une procédure stockée est invoquée avec diverses valeurs de paramètres, y compris une liste de chaînes. Cependant, la requête dans la procédure stockée nécessite que la liste soit transmise dans le cadre de la clause IN.
Solution : Utilisation des types de tables définis par l'utilisateur (SQL Server 2008)
SQL Server 2008 a introduit les types de tables définis par l'utilisateur, une fonctionnalité qui permet de transmettre des collections de données aux procédures stockées de manière structurée. Voici comment mettre en œuvre cette solution :
1. Créer un type de table défini par l'utilisateur
Créez un type de table qui correspond à la liste des chaînes. Par exemple :
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
2. Modifier la procédure stockée
Adapter la procédure stockée pour accepter le type de table comme paramètre d'entrée :
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Query using the table type SELECT l.Item FROM @list l; END
3. Remplissez le type de table en C#
En C#, créez un objet DataTable et remplissez-le avec la liste des chaînes. Ensuite, définissez un paramètre pour transmettre le DataTable à la procédure stockée.
using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString()); var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table; cmd.Parameters.Add(pList); }
4. Exécuter la procédure stockée
Exécuter la procédure stockée avec l'objet SqlParameter renseigné.
Exemple d'utilisation :
using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }
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!