Hallo zusammen,
ich würde gerne wissen, ob mein Konzept falsch ist oder was ich verändern muss, damit die Verarbeitung schneller läuft.
Die Tabelle tblAuftragKopf mit ca. 300.000 Datensätzen wird gelesen. Aus der Tabelle tblAuftragKopfdaten mit insgesamt ca. 1.000.000 Datensätzen werden die Datensätze gefiltert, welche dieselbe Auftragsnummer haben. In der Tabelle tblAuftragPositionen stehen verschiedene Werte, die für eine Berechnung herangezogen werden. Der Kopfsatz wird verändert, abschließend wird die komplette Tabelle gespeichert. Das funktioniert auch soweit, allerdings ist die Verarbeitung sehr langsam.
Dies ist nur ein Beispiel. Leider ist es in der Realität nicht möglich, die beiden Tabellen zu verknüpfen, da die "Auftragsnummer" für das Filtern der Positionssätze zunächst aufbereitet werden muss; sie steht nur in einem anderen Format zur Verfügung. In der Realität geht es nicht um Aufträge, ich wollte nur das Problem schildern.
Hier der Code:
Was ist falsch an meinem Konzept? Wie kann ich die Verarbeitung beschleunigen?
Bin für jeden Hinweis dankbar!
ich würde gerne wissen, ob mein Konzept falsch ist oder was ich verändern muss, damit die Verarbeitung schneller läuft.
Die Tabelle tblAuftragKopf mit ca. 300.000 Datensätzen wird gelesen. Aus der Tabelle tblAuftragKopfdaten mit insgesamt ca. 1.000.000 Datensätzen werden die Datensätze gefiltert, welche dieselbe Auftragsnummer haben. In der Tabelle tblAuftragPositionen stehen verschiedene Werte, die für eine Berechnung herangezogen werden. Der Kopfsatz wird verändert, abschließend wird die komplette Tabelle gespeichert. Das funktioniert auch soweit, allerdings ist die Verarbeitung sehr langsam.
Dies ist nur ein Beispiel. Leider ist es in der Realität nicht möglich, die beiden Tabellen zu verknüpfen, da die "Auftragsnummer" für das Filtern der Positionssätze zunächst aufbereitet werden muss; sie steht nur in einem anderen Format zur Verfügung. In der Realität geht es nicht um Aufträge, ich wollte nur das Problem schildern.
Hier der Code:
VB.NET-Quellcode
- Public strPcCONN As String
- Public sqlCONN As SqlConnection
- Public daKOPF As New SqlDataAdapter
- Public dsKOPF As New DataSet
- Public dtKOPF As New DataTable
- Public drKOPF As DataRow
- Public daPOS As New SqlDataAdapter
- Public dsPOS As New DataSet
- Public dtPOS As New DataTable
- Public drPOS As DataRow
- Dim strFILTER As String
- Dim dblWERT As Double
- ...
- strPcCONN = "Server=.\SQLExpress;AttachDbFilename=C:\TEST\TESTDB.mdf;Database=TESTDB;Trusted_Connection=Yes;"
- sqlCONN = New SqlConnection(strPcCONN)
- sqlCONN.Open()
- ...
- strPcSQL = "SELECT * FROM tblAuftragKopf"
- daKOPF = New SqlClient.SqlDataAdapter(strPcSQL, sqlCONN)
- daKOPF.Fill(.dsKOPF, strPcSQL)
- dtKOPF = dsKOPF.Tables(strPcSQL)
- dtKOPF.PrimaryKey = New DataColumn() { dtKOPF.Columns("AKID")}
- daPOS = New SqlClient.SqlDataAdapter("SELECT * FROM tblAuftragPositionen", sqlCONN)
- daPOS.Fill(dsPOS, "tblAuftragPositionen")
- dtPOS = dsPOS.Tables("tblAuftragPositionen")
- dtPOS.PrimaryKey = New DataColumn() { dtPOS.Columns("APID")}
- For Each drKOPF In dtKOPF.Rows
- strFILTER = "(APAUFTRAG = " & drKOPF!AKAUFTRAG & ")"
- Dim drROWS() As DataRow = dtPOS.Select(strFILTER)
- If drROWS.Length > 0 Then
- ... irgendwelche Berechnungen; Ergebnis steht in dblWERT
- End If
- drKOPF!AKERGEBNIS = dblWERT
- Next
- cmb = New SqlCommandBuilder(daKOPF)
- daKOPF.Update(dtKOPF)
Was ist falsch an meinem Konzept? Wie kann ich die Verarbeitung beschleunigen?
Bin für jeden Hinweis dankbar!