rsegovia 0 Denunciar post Postado Março 13, 2009 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
Oenning 0 Denunciar post Postado Março 13, 2009 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