erro com field count
Olá,
eu tento executar um metodo para atualizar uma tabela, mas dá o erro:
Tentativa inválida de chamar FieldCount quando o leitor estava fechado.
O código do método é esse:
public void DesmarcarCampanha(GridView grade)
{
Conexao = new SqlConnection(StrConexao.ConnectionString);
Conexao.Open();
foreach (GridViewRow row in grade.Rows)
{
int coluna = 8;
if (row.Cells[coluna].Text == "Sim")
{
Comando = new SqlCommand("UPDATE OrdensServico SET marcadoimpressao = NULL", Conexao);
Comando.ExecuteNonQuery();
}
grade.DataBind();
}
Conexao.Close();
}
João Teixeira
Curtidas 0
Respostas
Luiz Maia
06/01/2010
Ola João,
DataReader é forward-only/read-only e trabalha conectado no banco, se você fechar a conexão, o datareader se torna inválido.
quando você fez o finally abaixo, você fechou a conexão.
Conexao.Close();
Faça assim na sua aplicação final:
using(SqlDataReader BuscaRG = ExecutaStringSQL.RetornarDataReader("select top 1 * from senha "))
{
if (BuscaRG.Read())
Label1.Text = BuscaRG.GetString(0);
}O using vai assegurar que sua conexão feche sozinho e volte ao pool.
Abraços Att Luiz Maia
quando você fez o finally abaixo, você fechou a conexão.
Conexao.Close();
Faça assim na sua aplicação final:
using(SqlDataReader BuscaRG = ExecutaStringSQL.RetornarDataReader("select top 1 * from senha "))
{
if (BuscaRG.Read())
Label1.Text = BuscaRG.GetString(0);
}O using vai assegurar que sua conexão feche sozinho e volte ao pool.
Abraços Att Luiz Maia
GOSTEI 0
João Teixeira
06/01/2010
O erro aponta para a linha grade.databind();
e eu não estou usando datareader.
eu tenho um gridview numa webform que, ao ser carregada, deve exibir o gridview preenchido com as informações atualizadas pelo metodo onde dá o erro.
GOSTEI 0
Luiz Maia
06/01/2010
João,
O que realmente precisa fazer? Seu código esta me parecendo um pouco estranho, para que passar o GridView como parametro?
GOSTEI 0
João Teixeira
06/01/2010
Bem, é o seguinte:
tenho um gridview que é preenchido quando a página é carregada.
este médoto serve para verificar quais registros estão marcados e quais não estão.
os que estiverem marcados com "Sim" eu substituo e deixo o campo vazio.
é isso que o método faz.
eu uso a grid para ter a referencia das rows desta grid.
este webform serve para eu selecionar quais registros eu quero imprimir.
aí quando eu clico num botão "emitir OS" ele pega os registros que estão com o valor "Sim" e exibe em outra tela para impressao.
Este método que eu postei aqui eu utilizo para "limpar" a lista que já tinha vários marcados anteriormente.
GOSTEI 0
Luiz Maia
06/01/2010
João,
Não se passa um GridView por parametro para um método.
O que vc esta tentando fazer não funciona. Primeiramente, aconselho vc a dividir seu projeto em camadas, pelo menos duas, com a Interface e outra com Acesso a Dados. Dai, faça um método genérico para popular o gridView, assim você o invoca sempre que precisar, veja um exemplo que fiz´para vc abaixo: http://video.devmedia.com.br/discovirtual/200237/Joao.zip Aqui tenho meu WebForm Obra.aspx e seu codigo Obra.aspx.cs, onde se encontram as regras de negocio, ele acessa uma outra camada onde se encontra o arquivo Obra.cs (uma classe), esta classe faz acessos ao Banco de Dados usando uma SuperClasse. Qualquer dúvida, me pergunte ok? Tente começar seus projetos já usando Boas Práticas de desenvolvimento, assim não surgirão problemas mais complexos pela frente e ficará muito mais fácil dar manutenção. Abraços Att Luiz Maia
O que vc esta tentando fazer não funciona. Primeiramente, aconselho vc a dividir seu projeto em camadas, pelo menos duas, com a Interface e outra com Acesso a Dados. Dai, faça um método genérico para popular o gridView, assim você o invoca sempre que precisar, veja um exemplo que fiz´para vc abaixo: http://video.devmedia.com.br/discovirtual/200237/Joao.zip Aqui tenho meu WebForm Obra.aspx e seu codigo Obra.aspx.cs, onde se encontram as regras de negocio, ele acessa uma outra camada onde se encontra o arquivo Obra.cs (uma classe), esta classe faz acessos ao Banco de Dados usando uma SuperClasse. Qualquer dúvida, me pergunte ok? Tente começar seus projetos já usando Boas Práticas de desenvolvimento, assim não surgirão problemas mais complexos pela frente e ficará muito mais fácil dar manutenção. Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia
06/01/2010
E ai João, como esta indo?
Aguardo
Abraços
Att
Luiz Maia
GOSTEI 0
João Teixeira
06/01/2010
Não se passa um GridView por parametro para um método.
O que vc esta tentando fazer não funciona. Primeiramente, aconselho vc a dividir seu projeto em camadas, pelo menos duas, com a Interface e outra com Acesso a Dados. Dai, faça um método genérico para popular o gridView, assim você o invoca sempre que precisar, veja um exemplo que fiz´para vc abaixo: Olá, Na verdade temos utilizados os métodos recebendo os controles do webform como parametros e tem funcionado. O problema é que o sistema já se iniciou com o código meio desorganizado, e acho que vai ficar difícil colocá-lo em camadas mais organizadas. Vou dar uma olhada no seu exemplo, (a parte de design nao abre pois não tenho o arquivo de masterpage.) e vou fazer alguns testes. Depois te dou um retorno.
O que vc esta tentando fazer não funciona. Primeiramente, aconselho vc a dividir seu projeto em camadas, pelo menos duas, com a Interface e outra com Acesso a Dados. Dai, faça um método genérico para popular o gridView, assim você o invoca sempre que precisar, veja um exemplo que fiz´para vc abaixo: Olá, Na verdade temos utilizados os métodos recebendo os controles do webform como parametros e tem funcionado. O problema é que o sistema já se iniciou com o código meio desorganizado, e acho que vai ficar difícil colocá-lo em camadas mais organizadas. Vou dar uma olhada no seu exemplo, (a parte de design nao abre pois não tenho o arquivo de masterpage.) e vou fazer alguns testes. Depois te dou um retorno.
GOSTEI 0
Luiz Maia
06/01/2010
Ok Koão, fico no aguardo.
Qualquer dúvida que tiver me diga, ok?
Abraços
Att
Luiz Maia
GOSTEI 0
João Teixeira
06/01/2010
Olá, Consegui resolver esta questão.
Obrigado.
GOSTEI 0