Heim >Datenbank >MySQL-Tutorial >Wie übergebe ich eine C#-Stringliste an eine gespeicherte SQL Server-Prozedur?

Wie übergebe ich eine C#-Stringliste an eine gespeicherte SQL Server-Prozedur?

DDD
DDDOriginal
2025-01-13 09:22:43999Durchsuche

How to Pass a C# String List to a SQL Server Stored Procedure?

Übergabe der Liste an die gespeicherte SQL Server-Prozedur in C#

Frage:

Sie müssen die Liste der Zeichenfolgen aus Ihrem C#-Code an die gespeicherte SQL Server-Prozedur übergeben. Diese Liste ist jedoch dynamisch und enthält Hunderte von Elementen.

Lösung:

Benutzerdefinierte Tabellentypen (UDTT) verwenden

SQL Server 2008 und höher bietet benutzerdefinierte Tabellentypen (UDTT), mit denen Sie benutzerdefinierte Datentypen für die Verwendung in gespeicherten Prozeduren erstellen können. Bitte folgen Sie diesen Schritten:

  1. UDTT erstellen: Erstellen Sie ein neues UDTT mit einer SQL-Anweisung ähnlich der folgenden:
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);</code>
  1. Ändern Sie die gespeicherte Prozedur: Ändern Sie die gespeicherte Prozedur, um UDTT als Parameter zu empfangen:
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- 只返回我们传入的项目
    SELECT l.Item FROM @list l;
END</code>
  1. Füllen Sie eine Datentabelle in C#: Erstellen Sie eine Datentabelle, um eine Liste von Zeichenfolgen zu speichern:
<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>
  1. SqlParameter erstellen: Erstellen Sie einen neuen SqlParameter mit dem UDTT-Typ:
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured);
pList.TypeName = "dbo.StringList";
pList.Value = table;</code>
  1. Führen Sie die gespeicherte Prozedur aus: Führen Sie die gespeicherte Prozedur aus und rufen Sie die Ergebnisse ab:
<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>

Denken Sie daran, connstring durch Ihre eigene Verbindungszeichenfolge zu ersetzen. In diesem Codebeispiel wird davon ausgegangen, dass Ihre Liste 1000 Elemente enthält. Sie müssen die Schleife basierend auf der tatsächlichen Listengröße anpassen. Stellen Sie außerdem sicher, dass Ihre SQL Server-Instanz die Verwendung des Parameters READONLY aktiviert hat.

Das obige ist der detaillierte Inhalt vonWie übergebe ich eine C#-Stringliste an eine gespeicherte SQL Server-Prozedur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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