Ich schreibe einen .net Windows-Dienst, mit dem ich ein XML analysieren muss (mit etwa 5000 Knoten). Ich muss diese Knoten analysieren und Daten (zB 5000 Zeilen) in eine SQL-Datenbank einfügen. Soll ich alle diese Datensätze mit Batch einfügen oder soll ich sie einzeln einfügen? kann mir jemand mit dem Design/Algorithmus für optimale Leistung helfen?Einfügen von Datensätzen aus einem XML in die Datenbank
Antwort
Von Importing XML data into a SQL Server table with C# asp.net:
DataSet reportData = new DataSet();
reportData.ReadXml(Server.MapPath(”report.xml”));
SqlConnection connection = new SqlConnection(”CONNECTION STRING”);
SqlBulkCopy sbc = new SqlBulkCopy(connection);
sbc.DestinationTableName = “report_table”;
//if your DB col names don’t match your XML element names 100%
//then relate the source XML elements (1st param) with the destination DB cols
sbc.ColumnMappings.Add(”campaign”, “campaign_id”);
sbc.ColumnMappings.Add(”cost”, “cost_USD”);
connection.Open();
//table 4 is the main table in this dataset
sbc.WriteToServer(reportData.Tables[4]);
connection.Close();
Für eine optimale Performance verwenden ein forward only XML reader, ein transaction und ein bulk inserter
Natürlich ist diese Lösung etwas kniffliger und seine durchaus möglich, eine einfachere Implementierung besteht, dass weniger Code erfordert und führt ziemlich gut (EG. OPENXML)
Da Sie bereits mithilfe von SQL Server sind, würde ich empfehlen SSIS Check-out (Integration Servic es). Es hat eine eingebaute XML-Quelle, die direkt in SQL Server pumpt. Es ist schnell und würde Sie davon abhalten, diesen Code zu pflegen.
Sie könnten eine XSLT-Umwandlung verwenden, die den XML-Code mit insert-Anweisungen in eine SQL-Datei umwandelt.
Ich habe das einmal als Beweis für das Konzept in einem Tag oder so. Hier ist, was ich getan habe:
<xsl:strip-space elements="*"/>
<xsl:template match="auditlog">
<xsl:if test="sequence/struct/wstring[@value='edr']/../union/string/@value">
INSERT INTO AUDITLOGS (FILENAME, EVENTTIME, EDR) VALUES(
'<xsl:value-of select="@filename"/>',
'<xsl:value-of select="sequence/struct/union/any/sequence/struct/struct[@name='m_eventTime']/@datetime"/>',
'<xsl:value-of select="sequence/struct/wstring[@value='edr']/../union/string/@value"/>'
);
<xsl:apply-templates select="sequence"/>
</xsl:if>
</xsl:template>
<xsl:template match="struct[@id='ModifiedBalance']">
INSERT INTO MODIFIEDBALANCE (SOURCEKIND, SOURCEID, TYPEID, NAMEID, ORIGINAL, CURRENT, LOGID)
SELECT
'<xsl:value-of select="struct/enum/@value"/>',
<xsl:value-of select="struct/longlong/@value"/>,
<xsl:value-of select="struct/ushort[@id='BalanceTypeId']/@value"/>,
<xsl:value-of select="struct/ushort[@id='BalanceNameId']/@value"/>,
<xsl:value-of select="struct[@name='m_original']/@amount"/>,
<xsl:value-of select="struct[@name='m_current']/@amount"/>,
LOGID
FROM AUDITLOGS
WHERE FILENAME = '<xsl:value-of select="../../../../../@filename"/>';
</xsl:template>
</xsl:stylesheet>
- 1. Beste Datenbank zum Einfügen von Datensätzen
- 2. Eliminierung von doppelten Datensätzen in die Datenbank
- 3. In die Datenbank aus einem Array von Kontrollkästchen einfügen
- 4. Einfügen von Daten aus einem dynamischen Formular in die Datenbank
- 5. Hinzufügen von Datensätzen aus einem HTML-Formular in eine Datenbank
- 6. angezeigte Anzahl von Datensätzen aus der Datenbank
- 7. Vert.x: Abrufen von Datensätzen aus der Datenbank
- 8. Xquery Wie extrahiert man die Unterscheidungsbegriffe aus einem Satz von XML-Knoten in einem Satz von XML-Datensätzen?
- 9. Druid: Firehose zum Importieren von Datensätzen aus der Datenbank
- 10. Datensatzeinträge in Datenbank einfügen
- 11. XML in SQL Server 2008-Datenbank einfügen
- 12. Einfügen von Werten aus einer Textbox in die SQLite-Datenbank
- 13. Einfügen in die Datenbank
- 14. Einfügen in die Datenbank
- 15. Einfügen von Datensätzen in einer Zeit
- 16. Einfügen von Datensätzen mit automatischinkrementierenden Primärschlüsseln
- 17. Problem mit submitChanges() Einfügen von unerwünschten Datensätzen in linq
- 18. MySQL Einfügen aus einer Datenbank in einem anderen
- 19. Einfügen in die Datenbank von Joomla Formularfelder
- 20. Einfügen von Text in die Datenbank
- 21. Importieren von XML in die phpmyadmin Datenbank
- 22. TDD Einfügen in die Datenbank
- 23. POST eine beliebige Anzahl von Datensätzen aus einem HTML-Formular
- 24. Hinzufügen von Datensätzen zu einer Datenbank mit einem HTML-Formular
- 25. Löschen von Datensätzen aus der Datenbank mit jQuery
- 26. Löschen von Datensätzen aus der Datenbank mit einer Ajax-Anfrage
- 27. yii2 in die Datenbank einfügen
- 28. Einfügen von eindeutigen Werten aus XML in Tabelle
- 29. Einfügen von Datum in die Datenbank, wenn wir Daten in die Datenbank einfügen jedes Mal Anzeige Datum einfügen in asp.net
- 30. NHibernate Mapping XML-Daten in die Datenbank
Hallo, vielen Dank für Ihre inputs..my xml enthält etwa 5000 „Ordnung“ Knoten und ich versuche, sie in die Datenbank einfügen SqlBulkCopy mit .... während einige Datensätze einfügen konnte nicht in die Datenbank aufgenommen werden, dann kann ich diese fehlgeschlagenen Buch-IDs mit log4net.how in eine Protokolldatei aufnehmen. Wie erreiche ich diese Funktionalität? – user40907