Heim > Datenbank > MySQL-Tutorial > Wie übergebe ich effizient eine Liste von Zeichenfolgen von C# an eine gespeicherte SQL Server-Prozedur?

Wie übergebe ich effizient eine Liste von Zeichenfolgen von C# an eine gespeicherte SQL Server-Prozedur?

Mary-Kate Olsen
Freigeben: 2025-01-13 10:50:42
Original
363 Leute haben es durchsucht

How to Efficiently Pass a List of Strings from C# to a SQL Server Stored Procedure?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage