VB.Net congelamento quando a adição de 10000 + linhas para o SQL da lista

votos
0

Estou executando um serviço API RESTful que recebe dados de um servidor como uma string JSON. Cerca de 20 mil linhas estão sendo selecionados.

Dim js As New JavaScriptSerializer()
Dim prodlist As List(Of Product) = js.Deserialize(Of List(Of Product))(JSONreturn)

As linhas 20000 são preenchidos na lista PRODLIST. Verificado a contagem e manualmente verificou a lista.

Eu preciso inserir essas linhas em uma máquina cliente. No entanto, ao inserir as linhas, ele congela ou pára depois de inserir em torno de 600-700 linhas. Abaixo está o código que estou usando para inserir.

For Each item As Product In prodlist
                    Dim SPName As String = someSPname
                    With connectionstring

                        .Clear()
                        .Parameters(@itemnumber, SqlDbType.VarChar, ParameterDirection.Input, , item.itemnumber
                        .Parameters(@itemtype, SqlDbType.VarChar, ParameterDirection.Input, , item.itemtype)
                        .Parameters(@DESCRIPTION, SqlDbType.VarChar, ParameterDirection.Input, , item.DESCRIPTION)
                        .Execute(SPName)                                                        

                    End With
                Next

Nenhum erro é lançado. Ele simplesmente congela após a inserção de cerca de 600-700 linhas everytime.

inserção em massa não é uma opção. Como posso resolver isso?

UPDATE: Adicionando classe de conexão. Certeza que não há nenhum problema com isso:

    Public Class ConnectionClass


    Public ReadOnly Property ConnectionString() As String
        Get
            Return GetConfiguration()
        End Get
    End Property

    Public Sub Parameters(ByVal param_name As String, ByVal type As SqlDbType, ByVal direction As ParameterDirection, Optional param_size As Int32 = Nothing, Optional param_value As Object = Nothing)
            Dim sqlParam As SqlParameter = Nothing
            Try

                sqlParam = New SqlParameter(param_name, type)
                sqlParam.Size = param_size
                sqlParam.Direction = direction
                sqlParam.Value = param_value
                Lstparam.Add(sqlParam)
            Finally
                If sqlParam IsNot Nothing Then
                    sqlParam = Nothing
                End If
            End Try
        End Sub


    Public Sub Execute(ByVal strSpName As String, Optional ByVal Type As CommandType = CommandType.StoredProcedure)

            Try
                sqlcmd = New SqlCommand()
                sqlcmd.Connection = connection
                ''Setting the timeout to 50 mins as setup in the previous application
                sqlcmd.CommandTimeout = 3000
                If transaction IsNot Nothing Then
                    sqlcmd.Transaction = transaction
                End If
                sqlcmd.CommandType = Type
                sqlcmd.CommandText = strSpName

                For Each argument As SqlParameter In Lstparam 
                    sqlcmd.Parameters.Add(argument)
                Next
                For introw As Integer = 0 To sqlcmd.Parameters.Count - 1
                    If sqlcmd.Parameters.Item(introw).ParameterName.Contains(Parameter) Then
                        sqlcmd.Parameters.Item(introw).ParameterName = String.Empty


  End If
            Next
            sqlcmd.ExecuteNonQuery()
        Catch ex As Exception
            Throw
        End Try
    End Sub



Public Sub Clear()
        ClearParameters()
        Lstparam.Clear()
    End Sub


Public Sub ClearParameters()
        If Not sqlcmd Is Nothing Then
            Do Until sqlcmd.Parameters.Count = 0
                sqlcmd.Parameters.Clear()
            Loop
        End If
    End Sub







    Public Function GetConfiguration() As String
        Dim sbConnectionString As New StringBuilder
        With sbConnectionString
            .Append(Data Source=)
            .Append(ServerName)
            .Append(;)
            .Append(Initial Catalog =)
            .Append(DatabaseName)
            .Append(;)
            .Append(User ID =)
            .Append(UserName)
            .Append(;)
            .Append(Password =)
            .Append(UserPassword)
        End With
        Return sbConnectionString.ToString()
    End Function

    Public Function CreateClientConnection() As SqlConnection

        Dim connectionString As String

        Try
            connectionString = GetConfiguration()
            Dim substrings() As String = connectionString.ToUpper.Split(;)
            Dim substrings1() As String = connection.ConnectionString.ToUpper.Split(;)
            If Not (connection.State = ConnectionState.Open) Then

                connection.ConnectionString = connectionString
                connection.Open()
            ElseIf Not (Trim(substrings(0)) = Trim(substrings1(0))) Then


                If connection IsNot Nothing Then
                    connection.Dispose()
                End If
                connection.ConnectionString = connectionString
                connection.Open()
            End If
            Return connection
        Catch ex As Exception
            If connection IsNot Nothing Then
                connection.Dispose()
            End If
            Throw ex
        End Try

    End Function


End Class
Publicado 18/04/2017 em 04:37
fonte usuário
Em outras línguas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more