Optimieren von Datenbankeinfügungen in C#: Ein einzelner parametrisierter Abfrageansatz
Das einzelne Einfügen zahlreicher Zeilen in eine Datenbank ist ineffizient. Dieser Artikel demonstriert eine leistungsstarke Methode, die eine einzelne parametrisierte Abfrage in C# verwendet, um eine Masseneinfügung zu erreichen.
Der Schlüssel liegt in der Nutzung gespeicherter Prozeduren und Tabellenwertparameter. Dieser Ansatz umfasst drei Hauptschritte:
Definieren eines Tabellentyps:
Erstellen Sie einen benutzerdefinierten SQL Server-Tabellentyp, um die Struktur Ihrer Daten zu definieren, indem Sie Spaltennamen und Datentypen angeben.
Erstellen einer gespeicherten Prozedur:
Entwickeln Sie eine gespeicherte Prozedur, die Ihren benutzerdefinierten Tabellentyp als schreibgeschützten Tabellenwertparameter akzeptiert. Durch dieses Verfahren werden die Daten dann in Ihre Zieldatenbanktabelle eingefügt. Denken Sie daran, dass Tabellenwertparameter sein müssen READONLY
.
Implementierung des C#-Codes:
In Ihrer C#-Anwendung:
DataTable
-Objekt, das die Struktur Ihres benutzerdefinierten Tabellentyps widerspiegelt.DataTable
mit den Daten aus, die Sie einfügen möchten.DataTable
als Tabellenwertparameter.Hier ist ein Beispiel, das diesen Prozess veranschaulicht:
Tabellentyp (SQL):
<code class="language-sql">CREATE TYPE MyTableType AS TABLE ( Col1 INT, Col2 VARCHAR(20) ) GO</code>
Gespeicherte Prozedur (SQL):
<code class="language-sql">CREATE PROCEDURE MyProcedure (@MyTable MyTableType READONLY) AS BEGIN INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable; END; GO</code>
C#-Code:
<code class="language-csharp">using System.Data; using System.Data.SqlClient; // ... other code ... DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate dt with your data here... e.g., //DataRow row = dt.NewRow(); //row["Col1"] = 1; //row["Col2"] = "Value1"; //dt.Rows.Add(row); using (SqlConnection con = new SqlConnection("ConnectionString")) { using (SqlCommand cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@MyTable", dt); //AddWithValue handles type inference con.Open(); cmd.ExecuteNonQuery(); } }</code>
Diese Methode verbessert die Effizienz beim Einfügen in die Datenbank erheblich, indem die Anzahl der Datenbank-Roundtrips reduziert wird, was zu einer schnelleren und skalierbareren Datenverarbeitung führt.
Das obige ist der detaillierte Inhalt vonWie fügt man mit C# effizient mehrere parametrisierte Zeilen in eine Datenbank ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!