Optimierung der Massendateneinfügung in SQL Server mit C#
Der Umgang mit großen Datensätzen erfordert häufig effiziente Techniken zum Einfügen in die Datenbank. Beim Umgang mit Daten aus dem Internet sind parametrisierte Abfragen für Sicherheit und Leistung von entscheidender Bedeutung. Dieser Artikel zeigt eine bessere Methode als der übliche, ineffiziente zeilenweise Ansatz.
Bekämpfung ineffizienter einzeiliger Einfügungen
Iteratives Einfügen mit einzelnen INSERT
-Anweisungen (z. B. INSERT INTO DATABASE('web',@data)
) ist langsam und anfällig für SQL-Injection.
Die Lösung: Tabellenwertparameter (TVPs)
SQL Server 2008 und spätere Versionen unterstützen Table-Valued Parameters (TVPs) und bieten eine hocheffiziente Methode zur Masseneinfügung unter Beibehaltung der Parametrisierung aus Sicherheitsgründen.
1. Definieren eines benutzerdefinierten Tabellentyps (UDT)
Erstellen Sie zunächst einen UDT, der die Struktur Ihrer Zieldatenbanktabelle widerspiegelt:
<code class="language-sql">CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO</code>
2. Erstellen einer gespeicherten Prozedur mit einem TVP
Als nächstes erstellen Sie eine gespeicherte Prozedur, die das TVP akzeptiert:
<code class="language-sql">CREATE PROCEDURE MyProcedure ( @MyTable dbo.MyTableType READONLY -- READONLY is crucial for TVPs! ) AS INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable GO</code>
3. C#-Implementierung mit dem TVP
Der C#-Code verwendet ein DataTable
, um die Daten vor dem Einfügen zu speichern:
<code class="language-csharp">DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate the DataTable with your data here using (var con = new SqlConnection("ConnectionString")) { using (var cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@MyTable", dt); // Simplified parameter addition con.Open(); cmd.ExecuteNonQuery(); } }</code>
Dieser Ansatz nutzt TVPs für eine wesentlich schnellere und sicherere Massendateneinfügung im Vergleich zu einzelnen INSERT
Anweisungen. Die Verwendung von AddWithValue
vereinfacht die Parameterbehandlung. Denken Sie daran, "ConnectionString"
durch Ihre tatsächliche Verbindungszeichenfolge zu ersetzen.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von C# effizient parametrisierte Daten massenhaft in SQL Server einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!