Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
720
Assunto : .NET
Titulo: Utilizando um dataReader para preencher uma dataTable

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Quando utilizamos um adapter para preencher uma dataTable sabemos que o adapter usa um datareader para fazer o preenchimento.

Mas se já tivermos o dataReader disponível a coisa complica, pois não existe um método publico no dataadapter que aceite um datareader como parâmetro para preencher uma dataTable.

Método público. Mas existe um método protected no dataAdapter que faz isso sim. Porém por ser protected não podemos acessar diretamente.

Porém podemos sim acessar este método com uso de reflection, nos permitindo com muita facilidade criar uma sub para fazer o preenchimento da dataTable. Veja como fica :

Sub FillDataSetFromReader(ByVal ds As DataSet, ByVal table As String, ByVal dr As _
IDataReader)
' Create an xxxDataAdapter of the same type as the DataReader
Dim drType As Type = CObj(dr).GetType
Dim typename As String = drType.FullName.Replace("DataReader", "DataAdapter")
Dim daType As Type = drType.Assembly.GetType(typename)
Dim da As Object = Activator.CreateInstance(daType)
' invoke the protected Fill method that takes an IDataReader object
Dim args() As Object = {ds, table, dr, 0, 999999}
daType.InvokeMember("Fill", BindingFlags.InvokeMethod Or BindingFlags.NonPublic Or _
BindingFlags.Instance, Nothing, da, args)
' close the DataReader
dr.Close()
End Sub


Esta sub usa um truque bem simples para gerar o adapter : Pega o nome do tipo do datareader, substitui (na forma de string mesmo) a palavra dataReader por dataAdapter, recupera o tipo do dataAdapter do mesmo Assembly do dataReader e utiliza o Activator.CreateInstance para criar uma instância do adapter.

Em seguida monta um array com os parâmetros (os dois últimos são o número de registros inicial e final) e usa o método InvokeMember do objeto que contem o Type do dataAdapter para poder disparar o método protected.

Feito isso podemos utilizar esta sub para preencher uma dataTable, veja um exemplo :

Dim cn As New OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source" _
& "=.")
cn.Open()
Dim cm As New OleDbCommand("SELECT * FROM Publishers", cn)
Dim dr As OleDbDataReader = cm.ExecuteReader
Dim ds As New DataSet
FillDataSetFromReader(ds, "Publishers", dr)


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 10/14/2016 2:04:00 PM
nome: jqhbItLHlCrSMjlr
email: jimos4581rzt@hotmail.com
comentário:
6n4eyj http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

data: 10/14/2016 1:48:00 PM
nome: DEefkxdLasBDg
email: jimos4581rzt@hotmail.com
comentário:
OjjA08 http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

data: 8/6/2016 9:48:00 PM
nome: zOLEMwAoUgS
email: jimos4581rt@hotmail.com
comentário:
r5K5Zc http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

data: 11/11/2014 8:52:00 PM
nome: Artur Lopes
email: pequenoarturs@hotmail.com
comentário:
Este artigo é idêntico ao do site
http://www.macoratti.net/vbn_dtdr.htm


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br