Legen Sie den gesamten Wert der DataTable bulk in postgreSQL Tabelle
In SQL wir etwas tun, wie dies für die bulk insert, um datatable
SqlBulkCopy copy = new SqlBulkCopy(sqlCon);
copy.DestinationTableName = strDestinationTable;
copy.WriteToServer(dtFrom);
Blockquote
aber in PostgreSQL, wie Sie dies tun Betrieb
- github.com/npgsql/Npgsql/wiki/...
- toller Artikel sir @wingedpanther immer noch nicht Idee, weil das Vorschrift ist "Datentabelle" Daten direkt einfügen in die Tabelle, ohne die Schleife in c# MVC-DataTable enthält mehr als 1 lac-Rekord
- für die bulk insert in die PostgreSQL-Datenbank, die Sie verwenden können
COPY
importieren Sie die Daten in einecsv
(vermeiden datatable) und danncopy
Sie voncsv
zutable
- Sie möchten wandeln Sie in
CSV
dann fügen Sie es in die gewünschte Stelle. oder nicht?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einfach Einfügen Über Parameter
Ihrem Projekt verweisen müssen den folgenden Aufbau:
Npgsql
. Wenn dieser Verweis nicht sichtbar innerhalb Visual Studio, dann:GACInstall.exe
Beispieltabelle
Beispielcode
Sicher sein, verwenden Sie die folgenden Richtlinien:
Geben Sie den folgenden Quellcode in Ihre Methode:
Gedanken Auf Die Leistung
Den original-Beitrag keine Erwähnung von performance-Anforderungen. Es wurde beantragt, dass die Lösung des Problems muss:
DataTable
Wenn Sie das einfügen, erhebliche Mengen von Daten, dann würde ich vorschlagen, dass Sie werfen Sie einen Blick auf Ihre performance-Optionen. Die Postgres Dokumentation schlägt vor, dass Sie:
COPY
BefehlWeitere Informationen über die Optimierung von Postgres-Einsätze, bitte schauen Sie auf:
Außerdem gibt es eine Menge anderer Faktoren, die Auswirkungen auf Systemleistung. Für eine high-level Einführung, werfen Sie einen Blick auf:
Andere Optionen
Copy
Befehl?Npgsql
Stecker und fügen Sie Ihre eigenenBulkCopy()
Methode. Werden Sie sicher, überprüfen Sie die Quell-code-Lizenzierungs-Vereinbarung zuerst.Postgres
- Funktion, die können dann legen Sie die Daten direkt in das Ziel.Weitere Verweise
Ich habe das gleiche problem eine Zeit vor. Es scheint, gibt es keine "ready to use" Lösung, bis noch.
Habe ich gelesen diese post und bauen Sie sich eine ähnliche Lösung an, die Zeit, die im produktiven Einsatz bis heute. Die basiert auf den text Abfragen, welche Dateien liest von STDIN. Es verwendet die ADO.NET Postgre-Daten-Provider Npgsql. Sie können eine große Zeichenfolge (oder eine temporäre Datei, die Ursache der memory usage) auf der Basis der Datentabelle und wird als text-Abfrage mit dem Befehl "KOPIEREN". In unserem Fall war es viel schneller als inser unterrichten Zeile.
Vielleicht nicht eine komplette Lösung, aber vielleicht ein guter Punkt um zu starten und alles, was ich darüber weiß. 🙂
Ich habe auch festgestellt, dass es keine "ready to use" - Lösung noch nicht. Wahrscheinlich können Sie überprüfen, meine andere Antwort, in dem ich beschreibe, ein kleiner Helfer den ich erstellt habe für dieses problem den Einsatz der anderen Helfer wirklich einfach: https://stackoverflow.com/a/46063313/6654362
Ich denke, das ist derzeit die beste Lösung.
Ich geschrieben das die Lösung aus dem link in das Amt starb.
Bearbeiten:
Ich habe vor kurzem laufen in ähnliches problem, aber wir waren mit Postgresql. Ich wollte verwenden Sie eine effektive bulkinsert, was sich als ziemlich schwierig. Ich habe nicht gefunden eine angemessene freie Bibliothek, dies zu tun auf dieser DB. Ich fand nur diese Helfer:
https://bytefish.de/blog/postgresql_bulk_insert/
die ist auch auf Nuget. Ich habe geschrieben eine kleine mapper, die automatisch zugeordneten Eigenschaften den Weg Entity Framework:
Ich es auf dem folgenden Weg (ich hatte entity named Unternehmen):
Zeigte ich ein Beispiel mit der Transaktion, es kann aber auch mit der normalen Verbindung abgerufen aus dem Kontext. undertakingsToAdd Durchlaufen der normalen Entität Datensätze, die ich möchte bulkInsert in die DB.
Diese Lösung, auf die ich habe nach ein paar Stunden der Forschung und versucht, so, wie man erwarten konnte, viel schneller und schließlich einfach zu bedienen und kostenlos! Ich wirklich empfehlen, dass Sie diese Lösung verwenden, nicht nur für die oben genannten Gründen, aber auch, weil es der einzige ist, mit dem hatte ich keine Probleme mit Postgresql selbst, viele andere Lösungen, die einwandfrei funktionieren zum Beispiel mit SqlServer.
Wollen Sie wirklich verwenden DataTable für diese? Ob man mit EF Code First, dann könnten Sie code von dieser Artikel. Idee des Artikels ist die Verwendung von Npgsql KOPIE als Grundlage + abrufen von Metadaten aus der DB selbst, führen Sie diese mit den Metadaten-Modell-Klassen und dynamische Erzeugung von code für das schreiben der Daten.
Verwendung ist wie folgt: