VB.NET - Exportando um DataTable como String


Como você faria para exportar uma Tabela para o formato de String ? Se estivesse usando ADO usaria o método getString() certo ?

Mas infelizmente ADO.NET não possui o método getString(). Se não temos o método podemos então criá-lo certo ?

Pois neste artigo vou mostrar como você pode obter um resultset gerando um DataTable e exportar os dados no formato de uma string exibindo o resultado em uma caixa de Texto.

Como exemplo vou acessar o banco de dados Northwind.mdb que , no meu caso esta pasta d:\teste.

A string de conexão esta armazenada no arquivo de configuração web.config. (Leia o artigo : Tratando arquivos de configuração para saber mais)

Então para o exemplo deste artigo o arquivo de configuração tem o seguinte conteúdo:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
    <add key="acessoBD" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb" />
</appSettings>
</configuration>

Inicie um novo projeto no VS.NET e no formulário padrão insira os seguintes controles (conforme figura abaixo):

A combobox será preenchida na carga do formulário através do seguinte código no evento Load:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("Clientes")
        ComboBox1.Items.Add("Products")
        ComboBox1.Items.Add("Orders")
        ComboBox1.Items.Add("Customers")
        ComboBox1.Items.Add("Employees")
        ComboBox1.Items.Add("Categories")
        ComboBox1.SelectedIndex = 0
    End Sub

No evento Click do botão de comando vou colocar o código que chama o método getString() que vamos criar:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' preenche a tabela Order
        Dim tabela As String = ComboBox1.Text
        Dim sql As String = "SELECT * FROM " & tabela
        Dim da As New OleDbDataAdapter(sql, ConfigurationSettings.AppSettings("acessoBD"))
        Dim dt As New DataTable(tabela)
        Try
            da.Fill(dt)
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
        ' chama o método para converter o DataTable para String
        resultadoTextBox.Text = GetString(dt, -1, Nothing, Nothing, Nothing)
    End Sub

 

O método é mostrado abaixo:

Ele recebe os seguintes parâmetros:

Private Function GetString(ByVal dt As DataTable, ByVal numLinhas As Integer, ByVal delimitadorColunas As [String], _ 
ByVal delimitadorLinhas As [String], ByVal nullExpr As [String]) As [String]

        If numLinhas < 0 Then
            ' um número negativo retorna todas as rows (linhas)
            numLinhas = dt.Rows.Count
        Else
            numLinhas = Math.Max(numLinhas, dt.Rows.Count)
        End If

        ' o delimitador padrão da coluna é TAB
        If delimitadorColunas Is Nothing Then
            delimitadorColunas = ControlChars.Tab
        End If

        ' o delimitador padrão de roe é CARRIAGE RETURN
        If delimitadorLinhas Is Nothing Then
            delimitadorLinhas = ControlChars.CrLf
        End If

        ' se houver um null expression transforma em vazio
        If nullExpr Is Nothing Then
            nullExpr = ""
        End If

        Dim sb As New StringBuilder
        ' percorre a coleção de linhas(rows)
        Dim i As Integer
        For i = 0 To numLinhas - 1
            ' percorre a coleção de oclunas
            Dim col As Object
            For Each col In dt.Rows(i).ItemArray
                ' substitui os valores nulls
                Dim colString As String
                If col Is System.DBNull.Value Then
                    colString = nullExpr
                Else
                    colString = col.ToString()
                End If
                ' inclua o valor da coluna para string
                sb.Append((colString & delimitadorColunas))
            Next col
            ' remove o delimitador de colunas no último campo
            sb.Remove(sb.Length - delimitadorColunas.Length, delimitadorColunas.Length)
            ' inclui o delmitador de linha
            sb.Append(delimitadorLinhas)
        Next i
        Return sb.ToString()
    End Function

O resultado da execução para a tabela Clientes , que eu criei no banco de dados é :

(O usuário deverá selecionar a tabela que deseja converter e clicar no botão de comando.)

Acabamos de converter um DataTable para String.

Até o próximo artigo ...


José Carlos Macoratti