2009-06-25 11 views
0

In der Vergangenheit, wenn meine Anwendung viele Datensätze in eine SQL 2000-Datenbank einfügen musste, würde ich eine gespeicherte Prozedur einmal für jeden Datensatz aufrufen. Beim Einfügen vieler Datensätze stellte ich fest, dass die Leistung darunter gelitten hat, insbesondere wenn ein fetter Client einen Webdienst zum Ausführen des Datenbankaufrufs aufgerufen hat.Wie effizient Objekte in einer SQL 2000-Datenbank gespeichert werden

Dann habe ich gelernt, dass, wenn ich XML-Daten für viele Datensätze übergeben, SQL 2000 dies in einer temporären Tabelle speichern konnte und ich effizient die Datensätze in der XML-Tabelle mit einer einzigen SQL, die über alle Zeilen der Temp-Tabelle gleichzeitig. Dies reduzierte die Anzahl der Aufrufe an den SP auf eins und war auch effizienter, da die SQL-Aktualisierungsbefehle gleichzeitig an mehreren Datensätzen arbeiteten.

Ich persönlich wie ein Business Objects (BO) Schicht verwendet und bin nicht mit LINQ oder Entity Framework erfahren, so dass für den Moment annehmen, wollen sie, dass diese Werkzeuge außerhalb des Bereichs sind ...

In meiner BO Schicht Normalerweise füge ich einem Objekt eine "ToDataset" -Funktion hinzu, um das Objekt in ein Dataset mit einer Tabelle zu konvertieren, in der diese Tabelle eine Datenzeile enthält. Es ist der Datarow selbst, der die Darstellung der Daten im Objekt enthält.

Dann habe ich eine Sammelklasse, die zum Beispiel eine Sammlung des vorherigen Objekts ist. Es wird auch eine "ToDataset" -Methode haben, um eine Repräsentation aller Objekte in der Sammelklasse zu erstellen. Diese Funktion durchläuft die Objekte in der Sammlung und ruft für jedes die Objekte "ToDataset" -Funktion auf und führt diese Informationen in einen "akkumulierenden" Datensatz zusammen.

Wenn ich alle Datensätze in der Sammlungsklasse an einen SP übergeben möchte, würde ich die ToDataset-Methode der Collection-Klasse aufrufen und das XML für die ds an den SP übergeben.

Um die Größe dieses Beitrags niedrig zu halten, werde ich versuchen, diesen Ansatz nicht weiter zu rechtfertigen und mich Ihren Vorschlägen zu öffnen.

Wie machen gute Entwickler solche Sachen?

Im folgenden Codebeispiel sehen Sie, wie ich versuche, meine Objekte so zu definieren, dass sie geschachtelt werden können, dass beim Aufrufen der Todataset-Funktion für ein übergeordnetes Objekt alle untergeordneten Objekte jedoch mit a gerollt werden Muster definiert durch die Basisklasse. (Der Code ist nicht so lang, vielleicht sollte ich es posten. Wenn ich geflammt werde, werde ich es posten)

Ich erwarte einige entsetzliche Reaktionen. Sei freundlich. :-)

Vielen Dank für Ihr Interesse am Lesen bis zum Ende.

http://sites.google.com/site/dokmanc/Home/ObjectToDataset.zip?attredirects=0

Antwort

0

Absolut genial Strategie. Ändere nichts.

0

Haben Sie sich die SqlBulkCopy Class angesehen?

BTW, ich habe gerade erst diese Frage gesehen. Trotzdem hätte ich vielleicht gezögert, darauf zu antworten oder sogar viel davon zu lesen. Nachdem Sie erklärt hatten, dass Sie XML senden, um Daten effizient zu laden, haben Sie so gut wie alles gesagt, was Sie zu sagen hatten, um die Frage beantwortet zu bekommen.

Verwandte Themen