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>
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>
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>
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!