Usuário com melhor resposta
Retorno de metodo

Pergunta
-
Pessoal,
Tenho um metodo que executa um reader e deve retorna-lo pra quem o chamou:
public SqlDataReader ExecuteReader()
{
SqlDataReader reader = null;
try
{
this.Open();
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
this.Close();
}
return reader;
}Acontece que como ele passa no finally antes de retornar o resultado, o finally fecha a conexao e o reader se perde.
Se coloco o return dentro do bloco try, ele retornara o valor mas mantera a conexao aberta.
Como resolvo isso ?
Respostas
-
Tudo bem. E este dataReader vai ser retornado para onde?
Te recomendo utilizar as classe SQLHelper que já existe no Data Access Application Blocks : http://social.msdn.microsoft.com/Forums/pt-BR/webgeralpt/thread/4d73e07c-c268-4b69-a86d-22ddc52b17d3
--
Marque as respostas e ajude a melhorar a busca do fórum.- Sugerido como Resposta Olavo Oliveira NetoModerator domingo, 2 de outubro de 2011 04:14
- Marcado como Resposta Eder CostaModerator quinta-feira, 22 de dezembro de 2011 12:24
Todas as Respostas
-
Para que você quer fazer isso?
Veja que a conexão está sendo fechada em dois momentos:
.CloseConnection e no finally.
Eu acho melhor você passar a conexão para o método, executar o reader (ExecuteReader()) e retornar o mesmo em seguida. Feche a conexão no método que você chama o reader... mas que acho isso ai esquisito Eu acho.
--
Marque as respostas e ajude a melhorar a busca do fórum. -
-
Na verdade Eu errei no que escrevi. Quando você faz CommandBehavior.CloseConnection você diz que a conexão vai ser fechada quando o seu objeto DataReader for encerrado. Então precisa "fechar" o dataReader (seuDataReader.Close).
Para o seu caso penso em algo +- assim:
public SqlDataReader ExecutarSqlDataReader(SqlDataReader reader, SqlCommand cmd, SqlConnection con) { if (con.State == ConnectionState.Open) { con.Open(); } reader = cmd.ExecuteReader(); return reader; }
--
Marque as respostas e ajude a melhorar a busca do fórum. -
O problema é q estou utilizando desenvolvimento em camadas.
A Dal abre a conexao, executa o command, retorna o resultado e fecha a conexao.
Entao esse resultado volta para quem o chamou.Acontece que aqui, ele ou volta o resultado pra quem chamou e mantem a conexao aberta ou fecha a conexao e nao retorna os dados.
-
Tudo bem. E este dataReader vai ser retornado para onde?
Te recomendo utilizar as classe SQLHelper que já existe no Data Access Application Blocks : http://social.msdn.microsoft.com/Forums/pt-BR/webgeralpt/thread/4d73e07c-c268-4b69-a86d-22ddc52b17d3
--
Marque as respostas e ajude a melhorar a busca do fórum.- Sugerido como Resposta Olavo Oliveira NetoModerator domingo, 2 de outubro de 2011 04:14
- Marcado como Resposta Eder CostaModerator quinta-feira, 22 de dezembro de 2011 12:24