DataReader para DataSet


Ontem recebi um email de um amigo que me pedia se existia alguma forma de pegar o conteúdo de um DataReader e colocar em um DataSet.

Nunca tinha feito isso, e tinha certeza que é possível. Fiquei com tanta curiosidade que decidi colocar a “mão na massa” e tentar fazer essa funcionalidade.

Inicialmente sei que era possível percorrer os registros retornados. A única dúvida que estava um pouco preocupado, foi em como resgatar as colunas (tanto seus valores, quantos seus nomes). Pois bem, fui o Help e procurei pelos membros do DataReader e encontrei a propriedade FieldCount, qual retorna o número de colunas da linha em questão. Com isso, “matei” um problema, mas ainda faltava saber como resgatar o nome da coluna. Da mesma forma, fui ao Help e encontrei o método GetName, que dado um índice, ele retorna o nome desta coluna.

Depois disso, ficou simples, basta apenas percorrer os registros (linhas) do DataReader, e a cada linha, percorrer as colunas da mesma. O código abaixo, ilustra o processo:

        Dim conn As New SqlConnection(“ConnectionString”)
        Dim cmd As New SqlCommand(“SELECT * FROM Categories”, conn)
        Dim dr As SqlDataReader

        Dim i As Integer = 0
        Dim dRow As DataRow
        Dim num2 As Integer
        Dim ds As DataSet = New DataSet

        Try
            conn.Open()
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
            If dr.HasRows() Then
                ds.Tables.Add(“NomeTabela”)
                While dr.Read
                    dRow = ds.Tables(0).NewRow
                    num2 = 0
                    Do While (num2 < dr.FieldCount)
                        If (i = 0) Then
                            ds.Tables(0).Columns.Add(dr.GetName(num2))
                        End If
                        dRow(num2) = dr.GetValue(num2)
                        num2 = (num2 + 1)
                    Loop
                    i = (i + 1)
                    ds.Tables(0).Rows.Add(dRow)
                End While
                dr.Close()
            End If
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        Finally
            If Not
(dr Is Nothing) Then
                dr.Close()
            End If
        End Try

Mas uma coisa que fique bem claro: isso não quer dizer que gosto de DataSets 😉

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s