Ir para conteúdo

POWERED BY:

Arquivado

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

Almir Julio Grizante

DataReader - conexão dupla

Recommended Posts

Pessoal tenho o codigo abaixo, que funciona parcialmente, ele faz inclusão, alteração, e exclusão corretamente, o problema é que

quando tento propositadamente inserir um novo registro com o mesmo código de usuario. ele da a mensagem corretamente que já existe esse código na mensagem.box e da esse erro aqui:

 

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

 

traduzindo = Já existe um DataReader aberto associado a esta conexão que deve ser fechado primeiro.

 

 

solicito uma ajuda de como resolver, apontando o erro no codigo abaixxo.

 

desde já agradeço

 

o codigo é esse abaixo,

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using MySql.Data.MySqlClient;

 

 

 

namespace GerenciamentoEleitores

{

public partial class frmCadastroUsuarios : Form

{

 

MySqlConnection dbConexao;

MySqlDataAdapter dbAdapter;

MySqlCommand cmdIncluir, cmdConsultar;

public DataSet dsBanco;

public string Banco = "Persist Security Info=False;server=localhost;database=bdgerpol;uid=root;server=localhost;database=bdgerpol;uid=root;pwd=2525";

public int linhaClick;

 

 

public frmCadastroUsuarios()

{

InitializeComponent();

verificarBanco();

travaJanelas();

this.dtgUsuario.Columns[2].Visible = false;

this.dtgUsuario.Columns[3].Visible = false;

 

 

}

public void travaJanelas()

{

txtCodigoUsuario.Enabled = false;

txtNomeUsuario.Enabled = false;

txtEmailUsuario.Enabled = false;

txtSenhaUsuario.Enabled = false;

 

}

public void destravaJanelas()

{

txtCodigoUsuario.Enabled = true;

txtNomeUsuario.Enabled = true;

txtEmailUsuario.Enabled = true;

txtSenhaUsuario.Enabled = true;

txtCodigoUsuario.Focus();

}

// função para conexão ao banco de dados

private void verificarBanco()

{

dsBanco = new DataSet();

dbConexao = new MySqlConnection(Banco);

try

{

dbConexao.Open();

}

catch

{

MessageBox.Show("Problemas com o Banco de Dados");

}

if (dbConexao.State == ConnectionState.Open)

{

atualizaGrid();

}

}

 

private void atualizaGrid()

{

string sql = "Select * from tbusuario";

dbAdapter = new MySqlDataAdapter(sql, dbConexao);

dsBanco = new DataSet();

dbAdapter.Fill(dsBanco, "tbusuario");

dtgUsuario.DataSource = dsBanco;

dtgUsuario.DataMember = "tbusuario";

 

}

protected void limpar()

{

txtCodigoUsuario.Text = "";

txtNomeUsuario.Text = "";

txtEmailUsuario.Text = "";

txtSenhaUsuario.Text = "";

 

}

 

private void frmCadastroUsuarios_Load(object sender, EventArgs e)

{

btnExcluir.Enabled = false;

btnAlterar.Enabled = false;

btnIncluir.Enabled = false;

btnGrava.Enabled = false;

btnCancelar.Enabled = false;

 

}

 

private void btnSair_Click(object sender, EventArgs e)

{

this.Close();

}

 

private void btnNovo_Click(object sender, EventArgs e)

{

destravaJanelas();

limpar();

btnNovo.Enabled = false;

btnIncluir.Enabled = true;

btnCancelar.Enabled = true;

btnExcluir.Enabled = false;

btnAlterar.Enabled = false;

 

}

 

private void btnIncluir_Click(object sender, EventArgs e)

{

if ((txtCodigoUsuario.Text != string.Empty) && (txtNomeUsuario.Text != string.Empty) && (txtEmailUsuario.Text != string.Empty) && (txtSenhaUsuario.Text != string.Empty))

{

cmdConsultar = new MySqlCommand("select codigousuario from tbusuario where codigousuario=" + txtCodigoUsuario.Text + "", dbConexao);

MySqlDataReader retconsulta = cmdConsultar.ExecuteReader();

if (retconsulta.HasRows)

 

{

MessageBox.Show("Esse código já existe", "Mensagem do Sistema");

 

}

else

{

 

retconsulta.Close();

MySqlConnection cn2 = new MySqlConnection(Banco);

cn2.Open();

string incluiSql = "insert into tbusuario(codigousuario, nomeusuario, emailusuario, senhausuario) values (" + txtCodigoUsuario.Text + ",'" + txtNomeUsuario.Text + "','" + txtEmailUsuario.Text + "','" + txtSenhaUsuario.Text + "')";

cmdIncluir = new MySqlCommand(incluiSql, cn2);

cmdIncluir.ExecuteNonQuery();

MessageBox.Show("Inclusão efetuada com sucesso!", "Mensagem do Sistema");

}

limpar();

travaJanelas();

atualizaGrid();

btnIncluir.Enabled = false;

btnCancelar.Enabled = false;

btnNovo.Enabled = true;

 

}

else

{

MessageBox.Show("Obrigatório o preenchimento dos campos", "Mensagem de Alerta");

txtCodigoUsuario.Focus();

}

 

}

 

private void dtgUsuario_CellClick(object sender, DataGridViewCellEventArgs e)

{

 

 

travaJanelas();

btnCancelar.Enabled = false;

btnAlterar.Enabled = true;

btnExcluir.Enabled = true;

btnIncluir.Enabled = false;

btnNovo.Enabled = true;

 

linhaClick = int.Parse(e.RowIndex.ToString());

txtCodigoUsuario.Text = dtgUsuario[0, linhaClick].Value.ToString();

txtNomeUsuario.Text = dtgUsuario[1, linhaClick].Value.ToString();

txtEmailUsuario.Text = dtgUsuario[2, linhaClick].Value.ToString();

txtSenhaUsuario.Text = dtgUsuario[3, linhaClick].Value.ToString();

 

 

}

 

private void btnExcluir_Click(object sender, EventArgs e)

{

if (txtCodigoUsuario.Enabled == false && txtCodigoUsuario.Text == string.Empty)

{

MessageBox.Show("Nenhum item selecionado!!!", "Mensagem");

return;

}

string sqlDelete = "delete from tbusuario where codigousuario =" +

dtgUsuario[0, linhaClick].Value.ToString();

 

MySqlCommand cmdExcluir = new MySqlCommand(sqlDelete, dbConexao);

cmdExcluir.ExecuteNonQuery();

MessageBox.Show("Registro Eliminado com Sucesso!!!", "Mensagem");

limpar();

 

atualizaGrid();

 

btnExcluir.Enabled = false;

btnAlterar.Enabled = false;

btnNovo.Enabled = true;

 

}

 

private void btnAlterar_Click(object sender, EventArgs e)

{

if (txtCodigoUsuario.Enabled == false && txtCodigoUsuario.Text == string.Empty)

{

MessageBox.Show("Nenhum item selecionado!!!", "Mensagem");

return;

}

destravaJanelas();

btnNovo.Enabled = false;

btnExcluir.Enabled = false;

btnCancelar.Enabled = true;

btnAlterar.Enabled = false;

btnGrava.Enabled = true;

 

}

 

private void btnCancelar_Click(object sender, EventArgs e)

{

travaJanelas();

limpar();

btnNovo.Enabled = true;

btnIncluir.Enabled = false;

btnCancelar.Enabled = false;

btnGrava.Enabled = false;

 

}

 

private void btnGrava_Click(object sender, EventArgs e)

{

if (txtCodigoUsuario.Text == string.Empty &&

txtNomeUsuario.Text == string.Empty &&

txtEmailUsuario.Text == string.Empty &&

txtSenhaUsuario.Text == string.Empty)

{

MessageBox.Show("Campos Obrigatórios", "Mensagem");

return;

}

string sqlUpdate = "update tbusuario set " +

"codigousuario =" + txtCodigoUsuario.Text + "," +

"nomeusuario ='" + txtNomeUsuario.Text + "'," +

"emailusuario = '" + txtEmailUsuario.Text + "'," +

"senhausuario ='" + txtSenhaUsuario.Text + "'" +

" where codigousuario =" +

dtgUsuario[0, linhaClick].Value.ToString();

 

MySqlCommand cmdAlterar = new MySqlCommand(sqlUpdate, dbConexao);

cmdAlterar.ExecuteNonQuery();

MessageBox.Show("Registro Alterado com Sucesso!!!", "Mensagem");

limpar();

 

atualizaGrid();

 

btnExcluir.Enabled = false;

btnAlterar.Enabled = false;

btnNovo.Enabled = true;

btnCancelar.Enabled = false;

btnGrava.Enabled = false;

 

}

 

private void btnProcurar_Click(object sender, EventArgs e)

{

if (btnProcurar.Text == "Procurar")

{

btnProcurar.Text = "Executar";

txtNomeUsuario.Enabled = true;

txtNomeUsuario.Focus();

}

else

{

btnProcurar.Text = "Procurar";

txtNomeUsuario.Enabled = false;

if (txtNomeUsuario.Text != "")

{

string sqlSelect = "select * from tbusuario where nomeusuario like '%" +

txtNomeUsuario.Text + "%'";

MySqlCommand cmdPesquisar = new MySqlCommand(sqlSelect, dbConexao);

cmdPesquisar.ExecuteNonQuery();

dbAdapter = new MySqlDataAdapter(sqlSelect, dbConexao);

dsBanco = new DataSet();

dbAdapter.Fill(dsBanco, "tbusuario");

dtgUsuario.DataSource = dsBanco;

dtgUsuario.DataMember = "tbusuario";

}

else

{

atualizaGrid();

}

txtNomeUsuario.Clear();

}

 

}

 

 

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Almir, sugiro que coloque, dentro de cada bloco de código que executará alguma ação no banco, um Try/Catch. Isso ajudará na identificação do erro e correção.

Nos casos que você usar um objeto que é criado no próprio método e não será reutilizado nos demais métodos, sugiro usar o Try/Catch/Finally. Por exemplo:

 

private void btnIncluir_Click(object sender, EventArgs e)
{
  try
  { 
     if ((txtCodigoUsuario.Text != string.Empty) && (txtNomeUsuario.Text != string.Empty) && (txtEmailUsuario.Text != string.Empty) && (txtSenhaUsuario.Text != string.Empty))
     {
        cmdConsultar = new MySqlCommand("select codigousuario from tbusuario where codigousuario=" + txtCodigoUsuario.Text + "", dbConexao);
        MySqlDataReader retconsulta = cmdConsultar.ExecuteReader();

        if (retconsulta.HasRows)
        {
           MessageBox.Show("Esse código já existe", "Mensagem do Sistema");
        }
        else
        {

           retconsulta.Close();
           MySqlConnection cn2 = new MySqlConnection(Banco);
           cn2.Open();

           string incluiSql = "insert into tbusuario(codigousuario, nomeusuario, emailusuario, senhausuario) values (" + txtCodigoUsuario.Text + ",'" + txtNomeUsuario.Text + "','" + txtEmailUsuario.Text + "','" + txtSenhaUsuario.Text + "')";

           cmdIncluir = new MySqlCommand(incluiSql, cn2);
           cmdIncluir.ExecuteNonQuery();
           MessageBox.Show("Inclusão efetuada com sucesso!", "Mensagem do Sistema");
       }

       limpar();
       travaJanelas();
       atualizaGrid();
       btnIncluir.Enabled = false;
       btnCancelar.Enabled = false;
       btnNovo.Enabled = true;
  }
  else
  {
     MessageBox.Show("Obrigatório o preenchimento dos campos", "Mensagem de Alerta");
     txtCodigoUsuario.Focus();
  }

  catch (Exception ex)
  {
     MessageBox.Show("Ocorreu um erro durante a inserção dos dados: " + ex.Message);
  }

  finally
  {
     //Fecha todos os objetos que não serão usados e estão no escopo do método
     //Se cn2 estivesse instanciado no ínicio do método, poderia usar o Dispose() aqui.
     //Em todas as situações (sucesso ou erro) sempre irá passar pelo finally, que nesse caso destruiria a instancia da conexão
  }

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.