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 :
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );</code>
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END</code>
<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>
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;</code>
<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>
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!