Foros del Web » Programación para mayores de 30 ;) » Programación General »

Consulta masiva muy lenta en vb.net con sql express

Estas en el tema de Consulta masiva muy lenta en vb.net con sql express en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/03/2011, 10:39
 
Fecha de Ingreso: enero-2008
Ubicación: León
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 0
Consulta masiva muy lenta en vb.net con sql express

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.

Etiquetas: express, lenta, masiva, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:20.