C# und SQL Server: Effizienter Umgang mit String-Listen in gespeicherten Prozeduren
Eine häufige Herausforderung bei der Interaktion mit gespeicherten SQL Server-Prozeduren aus C# besteht darin, dynamische Listen mit Zeichenfolgenwerten zu übergeben. Dieser Artikel zeigt eine robuste Lösung mit benutzerdefinierten Tabellentypen (UDTTs).
Das Problem: Dynamische String-Listen
Stellen Sie sich eine gespeicherte Prozedur vor, die Ergebnisse basierend auf einer Liste von Zeichenfolgen variabler Länge filtern muss. Das direkte Weitergeben dieser Liste kann problematisch sein.
Lösung: Benutzerdefinierte Tabellentypen (UDTTs)
SQL Server 2008 und spätere Versionen bieten UDTTs als elegante Lösung. Wir erstellen ein UDTT namens StringList
, um unsere String-Sammlung zu kapseln.
Erstellen der gespeicherten Prozedur
Diese gespeicherte Prozedur verwendet den Typ 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>
C#-Implementierung
Der folgende C#-Code zeigt, wie diese gespeicherte Prozedur verwendet wird:
<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>
SSMS-Ausführungsbeispiel
Zum Testen in 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>
Dieser Ansatz bietet eine saubere, effiziente Methode zum Übergeben von Zeichenfolgenlisten von C# an gespeicherte SQL Server-Prozeduren und nutzt dabei die Leistungsfähigkeit von UDTTs für die strukturierte Datenübertragung. Denken Sie daran, "dbo.StringList"
durch das richtige Schema und den richtigen Namen zu ersetzen, wenn Sie diese geändert haben.
Das obige ist der detaillierte Inhalt vonWie übergebe ich effizient eine Liste von Zeichenfolgen von C# an eine gespeicherte SQL Server-Prozedur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!