Обновление CSV в MySQL - Visual Basic .NET

Формулировка задачи:

Здравствуйте форумчане! У меня есть файлы csv их необходимо загружать в удаленную базу. При этом если такие записи есть то обновлять определенные поля а если нету то добавлять. Файлов много, записей в общей сложности будет свыше 30000, обновление данных раз в неделю. вот то что сам сделал:
 For Each File In arrFiles
                Label1.Text = Label1.Text & vbCrLf & "Обработка файла " & IO.Path.GetFileName(File)
                Lines = IO.File.ReadAllLines(File, System.Text.Encoding.Default)
                'Импорт в таблицу USRUSER - хранятся логин пароль и другая информация о потребителе
                If InStr(IO.Path.GetFileName(File), "usrUser") > 0 Then
                    For i = 0 To Lines.Count - 1
                        CountRecord = CountRecord + 1
                        Array = Split(Lines(i), ";")
                        If Array(0) <> "" And Array(0) <> "0" Then
                            cmd.CommandText = "SELECT * from usrusers Where Login= '" & Array(0) & "'"
                            Try
                                reader = cmd.ExecuteReader()
                                If reader.HasRows Then
                                    cmd.CommandText = "UPDATE usrusers SET fio='" & Array(1) & "' ,adres='" & Array(2) &
                                        "',Debt=" & Array(3) & ",`Role`=0,phone='" & Array(4) & "',email='" & Array(5) &
                                        "' WHERE login='" & Array(0) & "'"
                                Else
                                    cmd.CommandText = "INSERT INTO usrusers (login,fio,adres,Debt,phone,email,`Role`) VALUES ('" & Array(0) & "','" &
                                    Array(1) & "','" & Array(2) & "','" & Array(3) & "','" & Array(4) & "','" & Array(5) & "',0)"
                                End If
                                reader.Close()
                                cmd.ExecuteNonQuery()
                            Catch ex As Exception
                            End Try
                        End If
                    Next
                End If
                'Конец импорта в таблицу usrUser
                'Импорт в таблицу usroperation - хранятся начисления и оплата
                If InStr(IO.Path.GetFileName(File), "usroperation") > 0 Then
                    For i = 0 To Lines.Count - 1
                        Array = Split(Lines(i), ";")
                        IDusr = OpredelenieIDusr(Array(0))
                        Try
                            cmd.CommandText = "SELECT * FROM usroperation Where UserID= '" & IDusr & "' and Data=" & Array(2) & " and VidOplati=" & Array(4)
                            reader = cmd.ExecuteReader()
                            If reader.HasRows Then
                                'cmd.CommandText = "UPDATE usroperation SET Vid='" & Array(1) & "' ,Data='" & Array(2) &
                                '       "',Summa=" & Array(3) & ",`VidOplati`=" & Array(4) & " WHERE login='" & IDusr & "'"
                            Else
                                cmd.CommandText = "INSERT INTO usroperation (UserID,Vid,Data,Summa,VidOplati) VALUES ('" & Array(0) & "','" &
                                    Array(1) & "','" & Array(2) & "','" & Array(3) & "','" & Array(4) & ")"
                            End If
                            reader.Close()
                            cmd.ExecuteNonQuery()
                        Catch ex As Exception
                        End Try
                    Next
                End If
            Next
Это все работает но очень медленно. И я точно знаю что есть метод проще (это всегда так, ибо я тот еще кодер) но найти не смог. На 4800 записей ушло 20 минут.

Код к задаче: «Обновление CSV в MySQL - Visual Basic .NET»

textual
  cmd.CommandText = "Load DATA LOCAL INFILE '\tmp" & IO.Path.GetFileName(File) & "' REPLACE INTO TABLE  `usrusersTemp`" &
" FIELDS TERMINATED BY  ';'                     (                    `login` ,                    `fio` ,                    `adres` ,                    `Debt` ,                    `phone` ,                    `email`
)"
                    Debug.Print(cmd.CommandText)
                    cmd.ExecuteNonQuery()

5   голосов, оценка 4.400 из 5


СОХРАНИТЬ ССЫЛКУ