Servus,
ich habe 1000 Datensätze, welche ich noch aufbereiten muss und in das DataSet in die jeweiligen Tabellen einspeichern muss. Aus den 1000 Datensätze entstehen dadurch insgesamt 78000 neue einträge in dem Dataset. Diese will ich asnychron zurückspeicher in meine Datenbank(mySQL). Momentan braucht er dafür ca. 18 Minuten um die Datensätze synchron zurückzuspeichern.
Irgendwo habe ich aber dabei einen Denkfehler. Ich will, das er jede Tabelle asynchron zurückspeichert. Ich habe es mit 3 verschiedenen Varianten Probiert:
Variante 1:
Spoiler anzeigen
ich Rufe für jede geaddete Row einen Sub auf, der den jeweiligen Command erzeugt.
Hier bekomme ich den Fehler, das schon eine besthender OpenReader vorhanden ist.
Variante 2:
Spoiler anzeigen
und Variante 3:
Spoiler anzeigen
Ich rufe eine Methode auf, welche direkt während die verbindung zur Datenbank besteht, jede geaddete Row in ein Mysqlcmd umwandelt, welcher dann ausgeführt wird.
Hier wird nur ein Datensatz zurückgespeichert.
Ich denke, ich verstehe hier die Asynchrone Methode nicht so ganz. Wo ist hierbei mein Denkfehler?
*Topic verschoben*
ich habe 1000 Datensätze, welche ich noch aufbereiten muss und in das DataSet in die jeweiligen Tabellen einspeichern muss. Aus den 1000 Datensätze entstehen dadurch insgesamt 78000 neue einträge in dem Dataset. Diese will ich asnychron zurückspeicher in meine Datenbank(mySQL). Momentan braucht er dafür ca. 18 Minuten um die Datensätze synchron zurückzuspeichern.
Irgendwo habe ich aber dabei einen Denkfehler. Ich will, das er jede Tabelle asynchron zurückspeichert. Ich habe es mit 3 verschiedenen Varianten Probiert:
Variante 1:
ich Rufe für jede geaddete Row einen Sub auf, der den jeweiligen Command erzeugt.
VB.NET-Quellcode
- For Each item As Updater.productData.Unterkategorie4Row In productData.Unterkategorie4.Select("", "", DataViewRowState.Added)
- IUnter4(item, "Insert")
- Next
- Async Sub IUnter4(ds As productData.Unterkategorie4Row, Command As String)
- Dim Mysqlcmd As New MySqlCommand
- Dim connStr As New MySqlConnectionStringBuilder With {
- .Server = Server,
- .Database = "productdata",
- .UserID = User,
- .Password = Password,
- .Port = 3306
- }
- Select Case Command
- Case "Insert"
- Using conn As New MySqlConnection(connStr.ToString)
- Await conn.OpenAsync()
- Mysqlcmd.Connection = conn
- Mysqlcmd.CommandText = "INSERT INTO `unterkategorie4`(`ID`, `Name`, `Auslesen`, `Unter3ID`, `Pfad`) VALUES " _
- & "('" & ds.ID & "','" & ds.Name & "','" & ds.Auslesen & "','" & ds.Unter3ID & "','" & ds.Pfad & "')"
- Await Mysqlcmd.ExecuteNonQueryAsync()
- End Using
- Case "Update"
- Using conn As New MySqlConnection(connStr.ToString)
- Await conn.OpenAsync()
- Mysqlcmd.Connection = conn
- Mysqlcmd.CommandText = "UPDATE `unterkategorie4` SET `ID`='" & ds.ID & " ',`Name`='" & ds.Name & "',`Auslesen`='" & ds.Auslesen & "',`Unter3ID`='" & ds.Unter3ID & "',`Pfad`='" & ds.Pfad & "' WHERE `ID` = '" & ds.ID & "'"
- Await Mysqlcmd.ExecuteNonQueryAsync()
- End Using
- Case "Delete"
- Using conn As New MySqlConnection(connStr.ToString)
- Await conn.OpenAsync()
- Mysqlcmd.Connection = conn
- Mysqlcmd.CommandText = "DELETE FROM `unterkategorie4` WHERE `ID` = '" & ds.ID & "')"
- Await Mysqlcmd.ExecuteNonQueryAsync()
- End Using
- End Select
Hier bekomme ich den Fehler, das schon eine besthender OpenReader vorhanden ist.
Variante 2:
Ich erzeuge für jede geaddete Row im Vorfeld einen MySqlCommand, diese übergebe ich der Asynchronen Methode:
Hier erhalte ich auch den Fehler, das es schon ein vorhandener openReader vorhanden ist.
VB.NET-Quellcode
- For Each item As Woocommerce.Woocommerce.Woocommerce.wp_term_taxonomyRow In Woocom.wp_term_taxonomy.Select("", "", Data.DataViewRowState.Added)
- Mysqlcmd.CommandText = "INSERT INTO `wp_term_taxonomy`(
- `term_taxonomy_id`,
- `term_id`,
- `taxonomy`,
- `description`,
- `parent`,
- `count`
- )
- VALUES(
- '" & item.term_taxonomy_id & "',
- '" & item.term_id & "',
- '" & item.taxonomy & "',
- '" & item.description & "',
- '" & item.parent & "',
- '" & item.count & "'
- )"
- Iwp_term_taxonomy(Mysqlcmd)
- Next
- Async Sub Iwp_term_taxonomy(Mysqlcmd As MySqlCommand)
- Dim connStr As New MySqlConnectionStringBuilder With {
- .Server = Server,
- .Database = "wordpress",
- .UserID = User,
- .Password = Password,
- .Port = 3306
- }
- Using conn As New MySqlConnection(connStr.ToString)
- Await conn.OpenAsync()
- Mysqlcmd.Connection = conn
- Await Mysqlcmd.ExecuteNonQueryAsync()
- End Using
- End Sub
Hier erhalte ich auch den Fehler, das es schon ein vorhandener openReader vorhanden ist.
und Variante 3:
Ich rufe eine Methode auf, welche direkt während die verbindung zur Datenbank besteht, jede geaddete Row in ein Mysqlcmd umwandelt, welcher dann ausgeführt wird.
VB.NET-Quellcode
- Async Sub Iwp_terms()
- Dim Mysqlcmd As New MySqlCommand
- Dim connStr As New MySqlConnectionStringBuilder With {
- .Server = Server,
- .Database = "wordpress",
- .UserID = User,
- .Password = Password,
- .Port = 3306
- }
- Using conn As New MySqlConnection(connStr.ToString)
- Await conn.OpenAsync()
- Mysqlcmd.Connection = conn
- For Each item As Woocommerce.Woocommerce.Woocommerce.wp_termsRow In Program.Woocom.wp_terms.Select("", "", Data.DataViewRowState.Added)
- Mysqlcmd.CommandText = "INSERT INTO `wp_terms`(
- `term_id`,
- `name`,
- `slug`,
- `term_group`
- )
- VALUES(
- '" & item.term_id & "',
- '" & item.name & "',
- '" & item.slug & "',
- '" & item.term_group & "'
- )"
- Await Mysqlcmd.ExecuteNonQueryAsync()
- Next
- For Each item As Woocommerce.Woocommerce.Woocommerce.wp_termsRow In Program.Woocom.wp_terms.Select("", "", Data.DataViewRowState.ModifiedCurrent)
- Mysqlcmd.CommandText &= "UPDATE
- `wp_terms`
- SET
- `name` = '" & item.name & "',
- `slug` = '" & item.slug & "',
- `term_group` = '" & item.term_group & "'
- WHERE
- `term_id` = '" & item.term_id & "'"
- Await Mysqlcmd.ExecuteNonQueryAsync()
- Next
- For Each item As Woocommerce.Woocommerce.Woocommerce.wp_termsRow In Program.Woocom.wp_terms.Select("", "", Data.DataViewRowState.Deleted)
- Mysqlcmd.CommandText &= "DELETE FROM `wp_terms` WHERE `term_id` = '" & item.term_id & "'"
- Await Mysqlcmd.ExecuteNonQueryAsync()
- Next
- End Using
- End Sub
Hier wird nur ein Datensatz zurückgespeichert.
Ich denke, ich verstehe hier die Asynchrone Methode nicht so ganz. Wo ist hierbei mein Denkfehler?
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()