Hola, tengo que importar un archivo txt que contiene 400.000 lineas a una base de datos sql, el metodo de importación es el siguiente:
Leo una linea del txt, divido la cadena en campos y con el campo "codigo" ejecuto una consulta de busqueda, si existe el registro compruebo los posibles cambios y si no existe el registro lo añado a la bd.
El proceso ya le tengo hecho pero es demasiado lento, he comprobado que si no ejecuto la consulta el txt lo lee completo en 96 segundos, pero si activo la consulta a la db se dispara el tiempo a más de 10 horas.
Aquí pongo una pequeña parte del código a ver si podeis echarme una mano, pues ando un poco perdido.
Código:
Do
strArti = objArticulos.ReadLine()
artNombreFabricante = Microsoft.VisualBasic.Left(strArti, 14)
artCodigoFabricante = Microsoft.VisualBasic.Mid(strArti, 15, 4)
artCodigoBarras = Microsoft.VisualBasic.Mid(strArti, 19, 10)
artDescripcion = Microsoft.VisualBasic.Mid(strArti, 29, 40)
artCodigo = Microsoft.VisualBasic.Mid(strArti, 69, 18)
artEan1 = Microsoft.VisualBasic.Mid(strArti, 87, 13)
If artCodigo<>"" then
If Microsoft.VisualBasic.Mid(strArti, 100, 11) IsNot Nothing Then
artPrecio = CDbl(Microsoft.VisualBasic.Mid(strArti, 100, 11))
End If
If Microsoft.VisualBasic.Mid(strArti, 111, 11) IsNot Nothing Then
artReciclaje = CDbl(Microsoft.VisualBasic.Mid(strArti, 111, 11))
End If
If Microsoft.VisualBasic.Mid(strArti, 122, 11) IsNot Nothing Then
artUnidades = CDbl(Microsoft.VisualBasic.Mid(strArti, 122, 11))
End If
If artUnidades <> 0 Then
artPrecio = artPrecio / artUnidades
End If
artPrecio1 = artPrecio / artCoef1
ArtPrecio2 = artPrecio / artCoef2
artTable = ArticulosTableAdapter.GetDataBy(Trim(artCodigo), Trim(artCodigoFabricante))
frase = ""
If artTable.Rows.Count = 0 Then
nNuevos = nNuevos + 1
' articulo nuevo lo damos de alta
Dim nuevoArticulo As ActiveDataSet.ArticulosRow
nuevoArticulo = ActiveDataSet.Articulos.NewArticulosRow()
nuevoArticulo.nombrefabricante = artNombreFabricante
nuevoArticulo.fabricante = artCodigoFabricante
nuevoArticulo.barras = artCodigoBarras
nuevoArticulo.descripcion = artDescripcion
nuevoArticulo.codigo = artCodigo
nuevoArticulo.ean1 = artEan1
nuevoArticulo.precio = artPrecio
nuevoArticulo.precio1 = artPrecio1
nuevoArticulo.precio2 = ArtPrecio2
nuevoArticulo.reciclaje = artReciclaje
Me.ActiveDataSet.Articulos.Rows.Add(nuevoArticulo)
Me.ArticulosTableAdapter.Update(Me.ActiveDataSet.Articulos)
' informamos
Fabricantes.Text = Fabricantes.Text & "Añadido: " & artCodigo & " - " & artDescripcion & vbCrLf
Else
If artTable.Rows(0)("precio") <> artPrecio Then
artTable.Rows(0)("precio") = artPrecio
artTable.Rows(0)("precio1") = artPrecio1
artTable.Rows(0)("precio2") = ArtPrecio2
frase = frase & " - Precios (0): " & artPrecio & " (1): " & artPrecio1 & " (2): " & ArtPrecio2
artcambios = True
End If
If artTable.Rows(0)("reciclaje") <> artReciclaje Then
artTable.Rows(0)("reciclaje") = artReciclaje
frase = frase & " - Reciclaje: " & artReciclaje
artcambios = True
End If
If artcambios = True Then
'guardamos los cambios del articulo
nModificados = nModificados + 1
Me.Articulos.EndEdit()
Me.ArticulosTableAdapter.Update(Me.ActiveDataSet.Articulos)
End If
Fabricantes.Text = Fabricantes.Text & "Articulo " & artCodigo & " modificado: " & vbCrLf
End If
End If
Contador.Text = linea
Application.DoEvents()
linea = linea + 1
Loop Until strArti Is Nothing
Gracias de antemano a todas las posibles sugerencias y ayuda.
Un saludo.