CONVERTER UM READER URGENTE

NALDOXD 11/07/2013 11:20:46
#425864
Bom dia galerinha, olha eu aqui de novo.. Comecei a testar meu projeto multibanco na parte prática até o momento deu tudo certo... estou agora com um pequeno problema que é... Olhando a foto acima eu estou fazendo um select simples e quero jogar para um metodo que realiza um while que alimenta a determinada classe.. no meu metodo READER eu coloquei como entrada um SqlDataReader como parâmetro mas o meu cmd.ExecuteReader() retorna um MysqlDataReader tentei colocar uma conversão ali no começo mas sem sucesso, alguém sabe como consigo converter esse mysql para sql deixando assim meu método genérico para todos os bancos?? Fico no aguardo e obrigado a todos que me ajudarem!! :D
NALDOXD 11/07/2013 11:28:22
#425867
Uma dúvida esse SqlDataReader é genérico ou ele é do SQL SERVER da própria Microsft? Pois estou chamando ele em
using System.Data.SqlClient;
Então pensei quele ele fosse uma classe genérica...
NALDOXD 11/07/2013 11:45:19
#425869
ok, burrice minha, sqldatareader é do sql server, alguém conhece algum datareader que pode ser usando globalmente?
OCELOT 11/07/2013 12:02:26
#425873
Não existe um que seja global, geralmente cada provider do ADO.Net tem o seus próprios objetos, porém eles implementam interfaces que podem ser usadas para tornar o código mais genérico, por exemplo no caso do SqlDataReader (ou MySqlDataReader, ou qualquer outro) se tem a interface IDataReader que pode ser passada para funções que precisam apenas de um DataReader, independente do banco de dados.

O mesmo vale para outros objetos, por exemplo você tem as interfaces IDbConnection, IDbCommand, IDbDataAdapter, entre outros.

Edit: só completando aqui, vi também que geralmente os providers implementam a classe herdando de um outro objeto, o System.Data.Common.DbDataReader, que também pode ser usado para isso.
NALDOXD 11/07/2013 14:52:27
#425901
Citação:

:
Não existe um que seja global, geralmente cada provider do ADO.Net tem o seus próprios objetos, porém eles implementam interfaces que podem ser usadas para tornar o código mais genérico, por exemplo no caso do SqlDataReader (ou MySqlDataReader, ou qualquer outro) se tem a interface IDataReader que pode ser passada para funções que precisam apenas de um DataReader, independente do banco de dados.

O mesmo vale para outros objetos, por exemplo você tem as interfaces IDbConnection, IDbCommand, IDbDataAdapter, entre outros.

Edit: só completando aqui, vi também que geralmente os providers implementam a classe herdando de um outro objeto, o System.Data.Common.DbDataReader, que também pode ser usado para isso.



Funcionou corretamente com as Interface IDataReader, mas para isso tive que utilizar a referencia using System.Data; esse data é nativa do próprio Windows correto? OCELOT, obrigado pela ajuda.. Mais uma dúvida rápida, o uso dos USING no lugar de declarar classe nome = new classe(); da algum tipo de performance no sistema? Tem alguma diferença em performance as duas formas ou é apenas uma maneira mais [ô]elegante[ô] de programa usando using?
KERPLUNK 11/07/2013 17:11:55
#425910
O using, é um bloco que ao ser finalizado, efetua o Close e Dispose do objeto instanciado, liberando o mesmo para o GAC. Não existe isso de [Ô]mais elegante[Ô], existe maneira mais correta ou menos correta. No caso do using, não corre o perigo de esquecer de dar o Dispose no objeto.
NALDOXD 11/07/2013 17:14:56
#425912
Entendi KERP, se ele da o dipose/close no objeto ele deveria dar um open também correto? ou não? porque ali tenho que abrir a conexão manualmente..
OCELOT 11/07/2013 17:34:22
#425917
Resposta escolhida
Citação:

:
O using, é um bloco que ao ser finalizado, efetua o Close e Dispose do objeto instanciado, liberando o mesmo para o GAC. Não existe isso de [Ô]mais elegante[Ô], existe maneira mais correta ou menos correta. No caso do using, não corre o perigo de esquecer de dar o Dispose no objeto.


Só corrigindo um pequeno erro de digitação acredito eu, não é GAC e sim GC

E quanto ao System.Data, este namespace é do próprio .Net framework, do assembly System.Data.dll que provavelmente você já tinha referenciado no seu projeto já que pra qualquer acesso a banco de dados acredito que ele seja necessário.

Quanto ao using fazer isso

using(classeQualquer c = new classeQualquer())
{
//codigo usando a variavel c aqui
}

seria mais ou menos o equivalente a fazer isso

classeQualquer c = new classeQualquer();
try
{
//codigo usando a variavel c aqui
}
finally
{
if (c != null)
c.Dispose();
}

Então pode usar sem problemas, é até bom usar ele quando o objeto implementar a interface IDisposable e o uso dele vai ser só ali naquele trecho de código
NALDOXD 11/07/2013 17:41:17
#425919
Saquei OCELOT, obrigado a todos!! vlw mesmo.. :D
Tópico encerrado , respostas não são mais permitidas