É POSSIVEL FAZER?
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();
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.
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.
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();
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.
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
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.