none
GRAVAR DATATABLE DE OUTRA FONTE DE DADOS - EM UM BANCO DE DADOS FIREBIRD RRS feed

  • Pergunta

  • Pessoal,

    Estou obtendo um DataTable de um arquivo de texto de largura fixa, da seguinte forma :

     'Essa sub tem como objetivo inserir o arquivo importado para o banco de dados
        Public Sub IMPORTA()
    
            '************************************************************************************************************************
            Dim arquivo As String = "E:\arquivo.txt"
            '************************************************************************************************************************
            Dim R50 As Boolean = False
            '************************************************************************************************************************
            Dim DTableR50 As New DataTable("DTableR50")
            '************************************************************************************************************************
            Dim STRING_R50() As String = ("TIPO|CNPJ|INSC_ESTADUAL").Split("|")
            '************************************************************************************************************************
            Dim QtdeR50 As Integer = STRING_R50.Length
            '************************************************************************************************************************
            Dim sAry50(QtdeR50) As String
            '************************************************************************************************************************
            For Each Coluna As String In STRING_R50
                DTableR50.Columns.Add(Coluna.Trim, GetType(String))
            Next
            '************************************************************************************************************************
    
    
            Dim OrigemColunas() = My.Computer.FileSystem.ReadAllText(arquivo).Split(vbCrLf.ToCharArray, _
                                  System.StringSplitOptions.RemoveEmptyEntries)
    
    
            'Cria um dataset que receberá o datatable
            Dim DataSet1 As DataSet = New DataSet
    
            'Abre a conexão com o banco de dados
            cn.Open()
    
    
            'Variável que receberá a string do Arquivo que será lido.
            Dim sFilename As String = arquivo
            Dim myStream As System.IO.StreamReader = New System.IO.StreamReader(sFilename)
            Dim line As String
            Dim RowField As DataRow
    
            'Loop que preenche o Datatable
            'Esse loop percorre todo o arquivo e verifica se a linha começa com o o valor procurado, ex.: 50
            Do
                'Lê o arquivo de texto linha por linha...
                line = myStream.ReadLine()
    
                'Se a linha for vazia encerra o laço
                If line Is Nothing Then
                    'Sai do laço DO
                    Exit Do
                Else
    
    
                    If line.StartsWith("50") Then
                        R50 = True
                        If R50 = True Then
    
                            'Obtém os valores dos campos que formarão a nova linha
                            '...Como o arquivo é de largura fixa, ou seja, não possui delimitador, Ex.: "|", ou ","...
                            '...os valores são obtidos através do posicionamento da string na corrente linha, usando o método SUBSTRING.
    
                            sAry50(0) = line.Substring(0, 2)     'Tipo
                            sAry50(1) = line.Substring(2, 14)    'CNPJ
                            sAry50(2) = line.Substring(16, 14)   'Inscrição Estadual
    
    
                            'Aqui a rotina que estou usando atualmente para inserir no banco
    
                            '*****************(INSERE NO BANCO DE DADOS)**********************
                            Dim INSERT_R50 As String = "INSERT INTO REGISTRO_50 (TIPO, CNPJ, INSC_ESTADUAL) VALUES ('" & sAry50(0) & "', '" & sAry50(1) & "', '" & sAry50(2) & "'" & ")"
    
                            Try
                                Dim cmd As New FbCommand(INSERT_R50, cn)
                                cmd.ExecuteNonQuery()
    
                            Catch ex As Exception
                                MsgBox(ex.Message.ToString)
                            Finally
                            End Try
    
                            '*******************************************************************************
    
                            'Monta a nova linha com a estrutura definida
                            RowField = DTableR50.NewRow
    
                            For i As Integer = 0 To STRING_R50.Length - 1
                                RowField(i) = sAry50(i)
                            Next
    
                            'Adiciona a nova linha ao DataTable
                            DTableR50.Rows.Add(RowField)
    
                        End If
                    End If
                End If
            Loop
    
    
            'Fecha o streamreader
            myStream.Close()
    
            cn.Close()
    
            'Adiciona os DataTables ao DataSet1
    
            DataSet1.Tables.Add(DTableR50)
    
    
        End Sub

    Até aí tudo bem, consigo obter o DataTable sem problemas, porém, gostaria de gravar esse datatable em uma tabela já existente do meu banco de dados.

    Eu estou conseguindo fazer isso usando a parte do código que está comentada :

     '*****************(INSERE NO BANCO DE DADOS)**********************

    Só que dependendo da quantidade de registros (20.000, por exemplo), está muito lenta a rotina.

    Talvez se eu fizesse um COMMIT quando atingisse uma determinada quantidade de registros, tipo 1.000, resolveria, porém, acredito que exista uma forma mais eficiente de fazer o que desejo e gravar toda a minha tabela no Banco.

    Desde já muito obrigado.



    domingo, 13 de outubro de 2013 20:53

Todas as Respostas