vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
ExecuteNonQuery bei "Update" wesentlich langsamer als bei "Insert"? 
Autor: Superuse
Datum: 14.12.11 11:41

Hallo,

bin eigentlich unter VB.Net noch kein fortgeschrittener (steige grad von VB6 auf VB 2010 um) aber ich hoffe, ich finde hier die richtige Antwort. Eventuell habe ich ja einen Denkfehler...

Ich möchte innerhalb eines tätglichen Update eine CSV-Datei in eine Mysql-Datenbank importieren und je nachdem, ob der Datensatz dort schon existiert, diese aktualisieren bzw. einfügen.
Ich mache das über ExecuteNonQuery. Interessanterweise dauert das Einfügen der Datensätze (ca. 25.000) Stück via "Insert" nur ein paar Minuten. Bei Update warte ich jetzt schon seit Stunden und es sind erst 3.000 Datensätze durch... Woran liegt das? Hier ein Codeausschnitt auf das wesentliche verkürzt
 
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) _
      Handles Button3.Click
        Dim x As Long
        Dim Anzahl As Long
        Dim sql As String
        Dim Conn As New MySqlConnection(Verbindungsstring)
        Dim myCommand As New MySqlCommand
        Conn.Open()
        x = 0
        If Me.DataGridView1.RowCount > 0 Then
            Do Until x = Me.DataGridView1.RowCount - 1
                Anzahl = Module1.returnString("Select count(*) from Artikel" & _
                  "where Artnum = 'K" &    RTrim(LTrim(Me.DataGridView1.Rows( _
                  x).Cells(5).Value)) & "'") 'Unterfunktion, die überprüft, ob _
                  der Datensatz bereits vorhanden ist. Das ist aber nicht _
                  Zeitkritisch, da das ja auch beim Insert geprüft wurde.
 
                If Anzahl = 0 Then 'Neuer Datensatz
                    sql = "Insert into Artikel...."
                    Try
                        myCommand.CommandText = sql
                        myCommand.Connection = Conn
                        myCommand.ExecuteNonQuery()
                    Catch myerror As MySqlException
                        MsgBox("There was an error updating the database: " & _
                          myerror.Message)
                    End Try
                 Else 'Datensatz aktualisieren
                    sql = "Update Artikel set ..."
                    Try
                        myCommand.CommandText = sql
                        myCommand.Connection = Conn
                        myCommand.ExecuteNonQuery()
                    Catch myerror As MySqlException
                        MsgBox("There was an error updating the database: " & _
                          myerror.Message)
                    End Try
               x = x + 1
            Loop
        End If
        If Not Conn Is Nothing Then Conn.Dispose()
        If Not myCommand Is Nothing Then myCommand.Dispose()
    End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
ExecuteNonQuery bei "Update" wesentlich langsamer als bei "I...2.131Superuse14.12.11 11:41
Re: ExecuteNonQuery bei "Update" wesentlich langsamer als be...996Superuse14.12.11 12:33
Re: ExecuteNonQuery bei "Update" wesentlich langsamer als be...1.100ModeratorFZelle14.12.11 19:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel