É POSSIVEL FAZER?

BETOPMJB 16/01/2017 00:01:47
#470737
como fazer dar certo dessa forma?

ConexaoDB.Conectar();
MySqlCommand ComandoRel = new MySqlCommand([Ô]select * from sqlrelrecebido[Ô], ConexaoDB.conexao);
MySqlDataReader lendoRel = ComandoRel.ExecuteReader();

if (lendoRel.Read())
{
MySqlCommand ComandoRel2 = new MySqlCommand([Ô]select * from outraconsulta[Ô], ConexaoDB.conexao);
MySqlDataReader lendoRel2 = ComandoRel2.ExecuteReader();

while(lendoRel2.Read())
{
MessageBox.Show([Ô][Ô]);
}
}
ConexaoDB.Desconectar();
KERPLUNK 16/01/2017 01:37:56
#470738
Resposta curta, não. Você não pode ter dois DataReaders abertos ao mesmo tempo. Mas isso não é um [Ô]problema[Ô]. DataReader é pura e simplesmente um leitor de dados. Dados esses que devem ser colocados em variáveis e o mais correto possível são classes. Então você cria uma classe, lê os dados e os coloca nessa classe. é esta a ordem correta de se trabalhar.
BETOPMJB 16/01/2017 10:46:57
#470744
sabe me dizer se no vbmania tem algum exemplo da forma que vc descreveu acima?
LUIS.HERRERA 16/01/2017 14:43:03
#470757
é assim Beto...

public List<ClienteModelo> MontaGridCliente()
{
List<ClienteModelo> listClientes = new List<ClienteModelo>();

string mySQL = [Ô]Sua string SQL aqui[Ô];
SqlCommand cmd = new SqlCommand();
cmd.Connection = Dados.cn; //é minha classe de conexão genérica
cmd.CommandText = mySQL;
SqlDataReader dr = null;

try
{
Dados.AbrirConexao([Ô][Ô], UsuarioMaster);
dr = cmd.ExecuteReader(); //Carrega os dados do banco

while (dr.Read())
{
ClienteModelo myCliente = new ClienteModelo();
myCliente.IDCliente = dr[[Ô]IDCliente[Ô]] == DBNull.Value ? 0 : Convert.ToInt32(dr[[Ô]IDCliente[Ô]]);
myCliente.RazaoSocial = dr[[Ô]RazaoSocial[Ô]] == DBNull.Value ? string.Empty : Convert.ToString(dr[[Ô]RazaoSocial[Ô]]);
.....
listClientes.Add(myCliente);
}
}
catch (SqlException)
{ throw; }
finally
{ Dados.FecharConexao(); }
return listClientes;
}

Boa sorte.
LVFIOROT 16/01/2017 15:12:35
#470758
Citação:

:
Resposta curta, não. Você não pode ter dois DataReaders abertos ao mesmo tempo. Mas isso não é um [Ô]problema[Ô]. DataReader é pura e simplesmente um leitor de dados. Dados esses que devem ser colocados em variáveis e o mais correto possível são classes. Então você cria uma classe, lê os dados e os coloca nessa classe. é esta a ordem correta de se trabalhar.




Na verdade pode, com conexões diferentes. Mas isso é tão errado, tão errado que ninguém faz, ou melhor, deve fazer isso!
O melhor fazer como o pessoal falou, faz o Load em outro objeto e depois tratar item a item.

ELUCIMAR 16/01/2017 16:31:52
#470760
BETOPMJB

Você pode usar mais de um DataReader usando o NextResult. Exemplo:

ConexaoDB.Conectar();
MySqlCommand ComandoRel = new MySqlCommand([Ô]select * from sqlrelrecebido;select * from outraconsulta[Ô], ConexaoDB.conexao);
MySqlDataReader lendoRel = ComandoRel.ExecuteReader();

if (lendoRel.Read())
{
while(lendoRel.Read())
{
MessageBox.Show([Ô][Ô]);
}

if (lendoRel.NextResult())
{
while (lendoRel.NextResult())
{
// Aqui você pega os dados do seu segundo Select.
}
}

}
ConexaoDB.Desconectar();
LUIS.HERRERA 17/01/2017 10:57:43
#470773
Elucimar nunca vi esse exemplo na Web, Se funcionar pode ser útil para carregar dados em um único acesso e fechar a conexão mais rápido.

Não sei se é isso que o Beto pretendia, mas quando tentei usar isso, foi para carregar a segunda fonte de dados com base na iteração do primeiro. Nesse cenário o único método é carregar os primeiros dados, percorrer o DataReader como expliquei no post acima passando para uma lista e depois percorrer cada registro carregando o mesmo DataReader (depois de fechar) para trazer os novos dados.
ELUCIMAR 17/01/2017 11:12:57
#470774
LUIS HERRERA

Sobre o NextResult veja alguns exemplos:

http://www.macoratti.net/07/10/net_mis.htm
https://support.microsoft.com/en-us/kb/311274
http://csharp.net-informations.com/data-providers/csharp-multiple-resultsets.htm
FOXMAN 19/01/2017 13:17:01
#470847
Citação:

:
Elucimar nunca vi esse exemplo na Web, Se funcionar pode ser útil para carregar dados em um único acesso e fechar a conexão mais rápido.

Não sei se é isso que o Beto pretendia, mas quando tentei usar isso, foi para carregar a segunda fonte de dados com base na iteração do primeiro. Nesse cenário o único método é carregar os primeiros dados, percorrer o DataReader como expliquei no post acima passando para uma lista e depois percorrer cada registro carregando o mesmo DataReader (depois de fechar) para trazer os novos dados.


Eu considero gambiarra, mas já fiz.

Para um resultado eu utilizei um DataReader, para outro(o mais importante) o DataSet, tudo na mesma conexão.
Lembrando que o DataReader pode ser lido apenas uma vez, enquanto o DataSet por diversas vezes.

Porém isso eu fiz a tempos atrás, muito por sinal. O correto é realmente alimentar Classes e usufrui-las.

Tópico encerrado , respostas não são mais permitidas