Heim >Backend-Entwicklung >C++ >Wie kann ich effizient Massendaten mit parametrisierten Abfragen in C# einfügen?

Wie kann ich effizient Massendaten mit parametrisierten Abfragen in C# einfügen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 21:58:39580Durchsuche

How Can I Efficiently Bulk Insert Data with Parameterized Queries in C#?

Masseneinfügung parametrisierter Variablen in eine Datenbank in C

In C# kann das Einfügen mehrerer Zeilen in eine Datenbank ein zeitaufwändiger Prozess sein, wenn jede Zeile ein separates INSERT erfordert Stellungnahme. Um die Leistung zu optimieren, ist es wünschenswert, mehrere Zeilen in eine einzelne Abfrage einzufügen und gleichzeitig parametrisierte Abfragen zu verwenden, um SQL-Injection-Angriffe zu verhindern.

Um dies zu erreichen, können Sie die Leistungsfähigkeit von Tabellenwertparametern nutzen, die Ihnen ermöglichen um einen strukturierten Datentyp (z. B. eine DataTable) an eine gespeicherte Prozedur zu übergeben. Dadurch können Sie mehrere Zeilen mit einem einzigen Befehl einfügen.

Um diesen Ansatz zu implementieren, befolgen Sie diese Schritte:

1. Erstellen Sie einen benutzerdefinierten Tabellentyp (UDT)

Erstellen Sie einen UDT, um die Zeilen darzustellen, die Sie einfügen möchten. Wenn Sie beispielsweise die Spalten „Col1“ und „Col2“ haben, können Sie einen UDT wie folgt erstellen:

CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20)
)
GO

2. Erstellen Sie eine gespeicherte Prozedur

Erstellen Sie eine gespeicherte Prozedur, um den UDT als Parameter zu akzeptieren:

CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- Table valued parameters must be ReadOnly!
)
AS

INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 
FROM @MyTable

GO

3. Führen Sie die gespeicherte Prozedur von C aus

Füllen Sie eine Datentabelle mit Ihren Daten aus:

DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));

// Populate data

Öffnen Sie eine Verbindung und führen Sie die gespeicherte Prozedur mit einem SqlCommand aus:

using (var con = new SqlConnection("ConnectionString"))
{
    using(var cmd = new SqlCommand("MyProcedure", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt;
        con.Open();
        cmd.ExecuteNonQuery();
    }
}

By Durch die Verwendung von Tabellenwertparametern und gespeicherten Prozeduren können Sie die Leistung von Masseneinfügungen deutlich verbessern und gleichzeitig die Sicherheit und Effizienz parametrisierter Operationen aufrechterhalten Abfragen.

Das obige ist der detaillierte Inhalt vonWie kann ich effizient Massendaten mit parametrisierten Abfragen in C# einfügen?. 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