Ir para conteúdo

Arquivado

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

EduFranzoni

Erro: "A Conexão deve ser aberta para esta operação"

Recommended Posts

Boa tarde a todos,

 

Estou com um probleminha, criei uma Web Application com um Web Form (com um único botão), e uma classe de conexão com o banco de dados Oracle XE;

 

Ai no evento click do botão, instanciei a classe Conexao, chamei o metodo connection e o método inserir.

 

E da o seguinte erro quando chamo o evento:

"InvalidOperationException unhandled by user code" A conexão deve ser aberta para esta operação.

OBS: O erro ocorre na linha cmd.ExecuteNonQuery(); do método Inserir() na classe Conexão.

 

Classe de conexão + operação inserir:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

using System.Data;

namespace Sistema
{
   public class Conexao
   {
       private static string SQL;
       private static OracleConnection conn;
       private static OracleCommand cmd;
       private static OracleDataAdapter da;
       private static DataSet ds;

       public string Connection()
       {
           try
           {
               string sql = "Data Source=XE;User Id=USUARIO_Q_CONTEM_TABELA;Password=SENHA;";
               conn = new OracleConnection(sql);
               conn.Open();
           }
           catch (OracleException e)
           {
               return e.Message;
           }

           return conn.State.ToString();

       }      

       public void Inserir()
       {
           Conexao cc = new Conexao();
           cc.Connection();

           string incluiSQL = @"insert into tbcliente (ID, NOME) values ('555', 'Eduardo')";

           OracleCommand cmd = new OracleCommand(incluiSQL, conn);
           cmd.CommandType = CommandType.Text;

           cmd.ExecuteNonQuery();


       }

       public void Fechar()
       {
           conn.Close();
       }
   }
}

Evento Click do botão.

 protected void btnAdd_Click(object sender, EventArgs e)
       {
           Conexao cc = new Conexao();            
           cc.Connection();
           cc.Inserir();
           lblMessage.Text = "inserido!";            
       }

 

OBS: Eu tenho uma aplicação console, com o mesmo esquema, só que com um select, e funciona normalmente!

Ou seja, a conexão existe, acesso atravez do SQL Developer normalmente!

 

 

Agradeço desde já, Obrigado, abraços....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, coloquei o método Inserir() dentro de um try-catch.

 

desse jeito

 

try

{

//metodo inserir(), igual esta acima

}catch(Exception e)

{

 

}

 

ai quando eu clico no botão, não acontece nada, não da erro, e nem inseri no banco.

 

OBS: dento do catch, eu tentei colocar "e.Message;" ou e.Message();" e dava erro, ai dexei sem.

 

Problemas e + Problemas, quando acho que estou conseguindo só piora!

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não consegue acessar o método Inserir diretamente quando está dentro de uma classe, tem que instanciar a classe assim :

 

Conexao cn = new Conexao();

cn.Inserir();

 

Ok?

 

Galera, coloquei o método Inserir() dentro de um try-catch.

 

desse jeito

 

try

{

//metodo inserir(), igual esta acima

}catch(Exception e)

{

 

}

 

ai quando eu clico no botão, não acontece nada, não da erro, e nem inseri no banco.

 

OBS: dento do catch, eu tentei colocar "e.Message;" ou e.Message();" e dava erro, ai dexei sem.

 

Problemas e + Problemas, quando acho que estou conseguindo só piora!

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não consegue acessar o método Inserir diretamente quando está dentro de uma classe, tem que instanciar a classe assim :

 

Conexao cn = new Conexao();

cn.Inserir();

 

Ok?

 

Galera, coloquei o método Inserir() dentro de um try-catch.

 

desse jeito

 

try

{

//metodo inserir(), igual esta acima

}catch(Exception e)

{

 

}

 

ai quando eu clico no botão, não acontece nada, não da erro, e nem inseri no banco.

 

OBS: dento do catch, eu tentei colocar "e.Message;" ou e.Message();" e dava erro, ai dexei sem.

 

Problemas e + Problemas, quando acho que estou conseguindo só piora!

 

 

Abraços

 

Foi o que fiz amigo! no meu segundo post diz que adicionei o try-catch no método inserir();

 

Thanks, mas ainda não resolvido =S

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você chama o método Connection() duas vezes. Repare dentro do método Inserir você tem cc.Connection(); e no evento do seu botão você tem de novo cc.Connection(); não tem necessidade. E pode estar ocasionando o erro.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você chama o método Connection() duas vezes. Repare dentro do método Inserir você tem cc.Connection(); e no evento do seu botão você tem de novo cc.Connection(); não tem necessidade. E pode estar ocasionando o erro.

 

Abraços...

 

fiz o que o 'quintelab' disse, e agora da o seguinte erro: "ORA-6413: Conexão não aberta."

 

já verifiquei a conexão e acesso o banco pelo Oracle SQL Developer normalmente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Às vezes o erro que vemos não é realmente aquele que ocorre.

 

Tente dar um conn.Close() em todas as situações imagináveis. A conexão pode estar aberta, e aí, não dá pra abrir outra conexão por cima, e dá erro. Como tu abriu esta conexão neste trecho mencionado, pode ser que ela esteja aberta em outro trecho... Tente fechar a conexão em todos os eventos relacionados a este trecho pra ver se dá certo.

 

Espero ter ajudado :)

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.