Jump to content

[Resolvido] Erro de ligação


N3lson

Recommended Posts

Estou a popular uma GridView através do DataReader ao abrir corre tudo normalmente mas ao tentar "repopular" devido a alterações na base de dados para mostrar as alterações dá o seguinte erro

Exception message: error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.

E em seguida informa a Exception

Connection must be valid and open

Mas a ligação está bem pois apenas o erro ocorre neste form e quando pretendo editar os valores e pretendo efectuar o refresh da grid


public void ReturnNotas(string estado = "")											// Anotações
	{
		MySqlDataReader readerNotas;

		DataTable dtNotas = new DataTable("Anotações");

		string query = "SELECT * FROM " + Controle.anotacoes;

		if (estado != "")
		{
			query += " WHERE estado=@estado";
		}

		dtNotas.Rows.Clear();
		this.GridNotas.DataSource = null;

		cmd = new MySqlCommand(query, con.liga());

		con.abre();

		cmd.Parameters.AddWithValue("@estado",estado);

		readerNotas = cmd.ExecuteReader();

		dtNotas.Columns.Add("id");
		dtNotas.Columns.Add("Nota");

		while(readerNotas.Read())
		{
			DataRow row = dtNotas.NewRow();
			row[0] = readerNotas["id"];
			row[1] = readerNotas["nota"].ToString().ToUpper();
			dtNotas.Rows.Add(row);
		}
		readerNotas.Close();

		this.GridNotas.DataSource = dtNotas;

		this.GridNotas.Columns[1].Visible = false;

		con.fecha();
	}

Função para repopular a GridView


private void Principal_Activated(object sender, EventArgs e)						   // Acções do utilizador (outros forms)
	{
		if (Controle.controlarUpdate == 1)
		{
			this.UltimasOrdens();
			this.PreventivasEfectuar();
			this.ReturnNotas("1");
			Controle.controlarUpdate = 0;
		}
	}

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to post
Share on other sites
apocsantos

Boa tarde,

Quando vais "actualizar" a datagrid com os novos dados, vindos da bd, vais precisar de fazer uma nova query à bd. Logo para fazeres a nova query, precisas de ter uma ligação estabelecida.

Cordiais cumprimentos,

Apocsantos

  • Vote 1

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Link to post
Share on other sites

A nova query já esta a ser efectuada neste método, sempre que haja alguma alteração na base de dados eu coloco a variável Controle.controlarUpdate = 1


private void Principal_Activated(object sender, EventArgs e)						   // Acções do utilizador (outros forms)
	{
		if (Controle.controlarUpdate == 1)
		{
			this.UltimasOrdens();
			this.PreventivasEfectuar();
			this.ReturnNotas("1");
			Controle.controlarUpdate = 0;
		}
	}

Eu fazia antes com datatable.fill e funcionava bem, mas mudei para o DataRow para controlar o retorno dos valores para apresentação, mas ao efectuar alteração qiando retornar a este form a aplicação crasha e dá o tal erro

Como aconselharias a mudar o código , mas mantendo o uso do DataRow ?

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to post
Share on other sites

Resolvido, apenas adicionei o try <> catch

Edited by N3lson

You can't do it, kid. But don't worry, my boy. You're not the only one. No one else can do it.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.