Führen Sie mehrere gespeicherte Prozeduren mit single-Reise-Datenbank

Ich habe eine Menge von legacy-Daten-Zugangs-code vor allem ein SqlCommand-Objekt mit der Gespeicherten Prozedur-Aufrufe, die wir ausführen eine Menge Insert-Anweisung in einer Datenbank.
Solange der SQL-server auf demselben Computer wie die Anwendung es wurden akzeptable Leistung, aber jetzt werden wir versuchen, einige der Daten auf SQL Azure.

Das problem ist, dass unser code ruft einen SP für jeden Datensatz einfügen die Ergebnisse in ganz wenigen Ausflüge in die Datenbank und wenn nicht auf dem gleichen server dauert es einige Zeit.

var conn = new SqlConnection("connString")
var cmd = new SqlCommand(conn, "spMyStoreProc");
cmd.Params.Add("@a", SqlDbType.VarChar, 10);
cmd.Params.Add("@b", SqlDbType.Int);

using(conn)
{
 conn.Open();
 foreach(var rec in recordsToInsert)
 {
   cmd.Parameters["@a"].Value = rec.A;
   cmd.Parameters["@b"].Value = rec.B;
   cmd.ExecuteNonQuery();
 }
 conn.Close();
}

Ich habe versucht den obigen code mit und ohne Transaktionen.

Habe ich auch schon versucht, eine "batch" - SQL-Anweisung mehrere SPs auf jeder Reise an den server.
Wie diese:

var cmd = new SqlCommand(conn);
cmd.CommandText = "EXEC spMyStoreProc @a='a' @b=2; EXEC spMyStoreProc @a='b' @b=4;"

Es erhöht die Leistung der Bedienung, aber da habe ich durchaus ein paar SPs, wo jeder SP hat etwa 20-50 params wird es ziemlich mühsam, Sie zu schreiben, diesen code für alle insert-Befehle in diesem data access-Komponente.

Ist dies der beste Weg, dies zu erreichen, oder kann ich irgendwie sagen ADO.NET ich möchte meine Anrufe ausführen als batch (noch nicht geschafft hat, alles, was auf seine mögliche aber das Gefühl, dass ich wenigstens Fragen sollte), um eine Netzwerk-Latenz etc zwischen jedem einzelnen SP nennen?

Wenn nicht, weiß jemand eine gute Möglichkeit dies zu erreichen, ohne zu schreiben, es "von hand" und da ist es eine legacy-Anwendung, die ich nicht ändern kann den data layer vollständig.
Gibt es irgendwelche Anwendungen, die Sie treffen können SqlCommands mit Parameter und generieren die TQL würden Sie ausführen?

Vielen Dank im Voraus

InformationsquelleAutor jmw | 2011-05-20

Schreibe einen Kommentar