Betrachten Sie Folgendes (mit Hilfe von Dapper) Beispiel 1:
var query = @"INSERT INTO FOO (ID, Name) VALUES (1, 'Test')
INSERT INTO FOO (ID, Name) VALUES (2, 'ABC')";
using(var con = connection)
{
con.Execute(query);
}
Beispiel 2:
var queryOne = "INSERT INTO FOO (ID, Name) VALUES (1, 'Test')";
var queryTwo = "INSERT INTO FOO (ID, Name) VALUES (2, 'ABC')";
using(var con = connection)
{
con.Execute(queryOne);
con.Execute(queryTwo);
}
Ich versuche zu verstehen, ob es wichtig ist, wie ich meine 2 Inserts ausführe. Von meinem Verständnis her wird con auf der using-Anweisung geöffnet und am Ende der using-Anweisung geschlossen.
Ist es egal wie oft ich con.Execute()
? Ist es besser, es nur unter einer Abfrage zu haben? Ich frage dies nach dem Zweck, das Design meiner Anwendung zu bestimmen, so dass ich weiß, ob ich die extra Meile gehen sollte, um zu versuchen, alle unter eine einzige Ausführung zu bringen.
Nicht sicher, ob es wichtig ist, aber ich beabsichtige, SQL Server zu verwenden.
Niemand kann deine Frage wirklich beantworten, weil niemand wirklich weiß, wie du "besser" auswertest.
Ein Vorteil des Single-Execute-Ansatzes ist, dass Ihre Anwendung weniger Round-Trips zum Server durchführt. Mit anderen Worten, es gibt weniger Overhead und weniger Wartezeiten. Wenn Ihre App nicht eine schnelle und zuverlässige Verbindung zum Beispiel haben, das könnte eine Menge Materie. Ein Nachteil ist, dass Ihre App möglicherweise nicht feststellen kann, welche Anweisung einen Fehler verursacht.
Außerdem können Sie eine einzelne Anweisung so strukturieren, dass mehrere Zeilen eingefügt werden, anstatt mehrere Anweisungen in der einen Zeichenfolge zu erstellen. Z.B,
insert dbo.FOO (ID, Name) values (1, 'Test'), (2, 'ABC');
Macht das einen Unterschied? Ein kleiner, aber du bist der Richter. Dies sind einfache Beispiele und es gibt keine einzige Antwort / Vorgehensweise, die für alle Situationen "am besten" ist. Und Sie müssen Ihre Transaktionsgrenzen berücksichtigen - wollen Sie, dass beide Zeilen als eine einzige Arbeitseinheit eingefügt werden (wenn also einer fehlschlägt, wird der andere auch nicht eingefügt)?