Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

grisson

Erro no comando ExecuteNonQuery - C#

Recommended Posts

Olá!

 

Estou lendo uma tabela pegando o valor de um campo e atualizando em outra tabela um campo com esse valor que peguei.

 

Estou pegando o erro na linha com o comando:

MySqlCommand cmd2 = new MySqlCommand(sSql2, conn);
int i = cmd2.ExecuteNonQuery();
O Erro é este:

There is already an open DataReader associated with this Connection which must be closed first.

 

Abaixo segue o codigo.

Agradeço se alguem puder ajudar a solucionar p problema.

Se tiverem uma sugestao melhor estou abertoa sugestoes.

protected void Page_Load(object sender, EventArgs e)
	{
		if (!IsPostBack)
		{
			string strConexao = "server=localhost;user id=usuario;password=senha;database=banco";
			string sSql = "SELECT codigo, CodMun FROM municipio ORDER BY CodMun ASC ";
			using (MySqlConnection conn = new MySqlConnection(strConexao))
			{
				MySqlDataReader r = null;
				MySqlCommand cmd = new MySqlCommand(sSql, conn);
				try
				{
					conn.Open();
					r = cmd.ExecuteReader(CommandBehavior.CloseConnection);
					if (r.HasRows)
					{
						int tmunic = r.GetOrdinal("CodMun");
						int tcodigo = r.GetOrdinal("codigo");
						while (r.Read())
						{
							string sSql2 = "UPDATE agencias SET codmunic = '" + r.GetString(tcodigo).ToString() + "' WHERE CodMun = '" + r.GetString(tmunic) + "' ";
							MySqlCommand cmd2 = new MySqlCommand(sSql2, conn);
							int i = cmd2.ExecuteNonQuery();
							if (i > 0)
							{
								Response.Write(r.GetString(tmunic).ToString() + "<br/>");
							}
							else
							{
								Response.Write("Erro ao inserir registro.");
							}
						}
					}
				}
				catch (Exception ex)
				{
					Label1.Text = ex.Message;
					conn.Close();
				}
			}
		}
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido Plataforma .NET » Visual Studio .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications

 

grisson, Seja Bem Vindo ao Fórum Imasters, de uma olhada em nossas regras: http://forum.imasters.com.br/index.php?act=Help

 

Estranho pois testei seu código e não deu erro algum, deu certinho!! :blink:

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Obrigado.

 

Mas, voltando ao meu erro.

 

O que poderia estar configurado no meu Visual Studio ou na minha aplicação que está dando o erro reportado e voce testou ai na sua maquina e nao deu nenhum erro???

 

Certamente é alguma configuração que na sua maquina tem que na minha não tem.

Se puder dar uma luz de onde pode ser, porque eu estou pegando o erro quando executo o UPDATE.

 

Obrigado de qualquer forma.

Abraços,

 

Grisson

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia!

 

O que voce chama de mais de uma conexao?

 

Eu abro o banco uma unica vez e dou um select numa tabela e depois faco um loop para le-la e enquanto leio abro uma outra tabela para atualizar um campo com o dado da primeira tabela.

 

Voce chama de mais de uma conexao a abertura de duas tabelas simuntaneamente?

Se isso nao é correto, então por favor, me diga como poderia fazer para ler uma tabela e enquanto nao chegasse o fim da leitura pudesse abrir uma outra tabela para ser atualizada.

 

Sou novo em C# e antes trabalhei com VB 6.0 e sempre li tabelas simultaneamente.

 

Peço a voce se puder, que me de uma luz em relação isso. Até mesmo esqueça meu codigo e sugira uma outra forma de fazer esse acesso.

 

Obrigado.

Grisson

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK. Obrigado.

 

Mas lembre que o erro que estou pegando é esse:

 

There is already an open DataReader associated with this Connection which must be closed first.

 

Ele dá quando executo o ExecuteNonQuery do UPDATE.

 

Ele reclama que já tem um DataReader associado e que teria que fecha-lo primeiro.

 

Só que não tem 2 DataReader, logo é um erro maluco.

 

Mas, agradeço se voce ou outro membro do Forum possa ajudar.

 

Abraços,

Grisson.

Compartilhar este post


Link para o post
Compartilhar em outros sites

conn.Open();

r = cmd.ExecuteReader(Commandbehavior.CloseConnection);

 

nessa linha mano você executa o datareader, voce só poderá executar o command.executenonquery(); depois que fechar a conexao com o datareader

ou seja, r.close(); só assim poderá chamar "int i = cmd2.ExecuteNonQuery();"... faça os testes comente uma dessas linhas ou de um close no datareader forçado mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá arthas_sp,

 

Obrigado por compartilhar seu conhecimento conosco.

 

Continue contribuindo respondendo os tópicos mais recentes.

 

Abraços

 

Mário Monteiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.