Ir para conteúdo

POWERED BY:

Arquivado

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

rsegovia

ExecuteReader requires an open and available Connection.

Recommended Posts

Bom dia galera.

 

Coloquei um sistema meu para "rodar" e as vezes eu tenho esse erro "ExecuteReader requires an open and available Connection. The connection's current state is closed".

 

O maior problema é que isso acontece as vezes, nao acontece constantemente, fiz varias verificações e mesmo assim não conseguir resolver o problema. Segue abaixo uma parte do codigo.

 

So para deixar mais claro, ExecuteQuerySy -> conecta em um banco SyBase e ExecuteQuery -> Conecta em um banco Sql Server.

 

Variáveis

public SqlConnection sConn = new SqlConnection();
public OdbcConnection sSyConn = new OdbcConnection();

Função que da o erro:

public bool validaUsuario(string usr, string pwd, out string razaoSocial, out string codContrato, string ip) {
			string strSql;
			strSql = "exec db_extranet..sp_login_x25 '" + strEscape(usr) + "','" + strEscape(pwd) + "'";
			clsBanco db = new clsBanco();
			using (OdbcDataReader dr = db.ExecuteQuerySy(strSql)) {
				if (dr.HasRows)
				{
					try
					{
						dr.Read();
						razaoSocial = dr["txt_raz_social"].ToString();
						codContrato = dr["cod_contrato"].ToString();
						strSql = "exec axaDatos..sp_atualiza_login_x25 '" + strEscape(ip) + "','" + strEscape(usr) + "'";
						dr.Close();
						//strSql = "Update db_tabela..tb_prestador_x25 set ind_logado='S', cod_ip='" + strEscape(ip) + "' where cod_prestador='" + strEscape(usr) + "'";
						SqlDataReader dr2 = db.ExecuteQuery(strSql);
						dr2.Close();
						return true;
					}
					catch (SqlException ex)
					{
						WriteFile("SQL EX: " + ex.Message);
						razaoSocial = "";
						codContrato = "";
						return false;
					}
					catch (Exception ex) {
						WriteFile("SQL EX: " + ex.Message);
						razaoSocial = "";
						codContrato = "";
						return false;
					}
				}
				else 
				{
					razaoSocial = "";
					codContrato = "";
					return false;
				}
			}
		}

Funcção para manipulação de dados em geral

public SqlDataReader ExecuteQuery(string strSql)
		{
			try
			{
				SqlCommand command = new SqlCommand();
				command.CommandType = CommandType.Text;
				command.CommandText = strSql;
				command.Connection = sConn;
				if (sConn.State == 0)
				{
					Conecta();
				}
				SqlDataReader reader = command.ExecuteReader();
				return reader;
			}
			catch (SqlException ex) { 
				clsFuncoes fnc = new clsFuncoes();
				fnc.WriteFile("ExecuteQuery error : " + ex.Message);
				return null;
			}

		}

Função que abre a cnx com o banco

public void Conecta()
		{

			try
			{
				sConn.ConnectionString = getconexao();
				if (sConn.State == 0)
				{
					sConn.Open();
				}
			}

			catch (Exception e)
			{
				
			}
		}

Vlw novamente galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, olhando assim não vi problemas. Mas coloque aqui o conteudo da função getconexao() e ExecuteQuerySy(), se possível.

Aproveitando, talvez até seja o problema, não sei, mas mude isso:

SqlDataReader dr2 = db.ExecuteQuery(strSql);
dr2.Close();
Você está dando um update usando DataReader, isso é errado. O SqlCommand possui um método chamado ExecuteNonQuery.

Esse método é específico para update,insert,delete,create table etc.

 

Valeu!

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.