none
Mejor forma de llevar a cabo este proceso RRS feed

  • Pregunta

  • Buenas, tengo el siguiente procedimiento :

    En primer lugar relleno un listview con 3500 registros, lo hago en un listview porque es increíblemente rápido, toma decimas de segundos. En el caso real, ese listview lo relleno con los datos que me arroja un lector de código de barras.

    Y ahora, todos esos registros del listview los almaceno en una tabla de sql server.

    El problema es que el proceso de guardar en la tabla, para 3500 registro toma unos 9 segundos y me gustaría que me aconsejarais si se os ocurre algún otra forma de aligerarlo mas.

    Muchas gracias por anticipado.

     lvLogs.Items.Clear()
    
            Dim lvItem As New ListViewItem("Items", 0)
            Dim iGLCount As Integer
            For iGLCount = 1 To 3500
                iGLCount += 1
                lvItem = lvLogs.Items.Add(iGLCount.ToString())
                lvItem.SubItems.Add("03375426")
                lvItem.SubItems.Add("2")
                lvItem.SubItems.Add("1")
                lvItem.SubItems.Add("2014/03/05 13:13:13")
                lvItem.SubItems.Add("3")
            Next iGLCount
            MsgBox("YA")
    
    Using cnn As New SqlConnection(My.Settings.cs_cs.ToString)
       Dim query As String = "insert into tabla1 (tipr, tarjeta, tipomarcaje) "
                query = query & " values (@tipr, @tarjeta, @tipomarcaje) "
    
                Dim cmd As New SqlCommand(query, cnn)
                cnn.Open()
    
                For Each item As ListViewItem In lvLogs.Items
                    cmd.Parameters.Clear()
                    cmd.Parameters.AddWithValue("@lector", "12312")
                    cmd.Parameters.AddWithValue("@tarjeta", "123123")
                    cmd.Parameters.AddWithValue("@tipomarcaje", "123213")
                    cmd.ExecuteNonQuery()
                Next
    
                MsgBox("YA")

    miércoles, 13 de abril de 2016 16:01

Respuestas

  • puedes generarte un DataTable con esos datos y asignarlo al ListView para luego usarlo con SqlBulkCopy

    fijate que hay un método WriteToServer que está sobrecargado y admite varios tipos de parametroS y tienes también la versión Async del mismo


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra miércoles, 13 de abril de 2016 16:20
    • Marcado como respuesta mayoko miércoles, 13 de abril de 2016 16:57
    miércoles, 13 de abril de 2016 16:19

Todas las respuestas

  • puedes generarte un DataTable con esos datos y asignarlo al ListView para luego usarlo con SqlBulkCopy

    fijate que hay un método WriteToServer que está sobrecargado y admite varios tipos de parametroS y tienes también la versión Async del mismo


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra miércoles, 13 de abril de 2016 16:20
    • Marcado como respuesta mayoko miércoles, 13 de abril de 2016 16:57
    miércoles, 13 de abril de 2016 16:19
  • Muchas gracias!

    Me resulta super interesante el SQLBulkCopy.

    miércoles, 13 de abril de 2016 16:58