none
[Resolvido]Conexão ADO (Postgre - Npgsql) - Erro mas grava no BD. RRS feed

  • Pergunta

  • Boa tarde,

     

    Estou criando um pequeno sistema, C# - Windows Form com Postgre usando Npgsql.

     

    No meu formulário chamo o método para incluir:

     

     Medico med = new Medico();

                    med.NomeMedico = txtNome.Text;

                    med.Crm = txtCrm.Text;

     

                    MedicoDAL medDal = new MedicoDAL();

                    medDal.incluir(med); 

     

    beleza... agora o metodo incluir:

     

     

    public void incluir(Medico medico)

            {

                NpgsqlConnection cn = new NpgsqlConnection();

     

                try

                {

                    cn.ConnectionString = Dados.StringDeConexao;

                    NpgsqlCommand cmd = new NpgsqlCommand();

                    cmd.Connection = cn;

                    cmd.CommandText = "insert into medico(nomemedico,crm) values (@nomeMedico,@crm);";

                    cmd.Parameters.AddWithValue("@nomeMedico", medico.NomeMedico);

                    cmd.Parameters.AddWithValue("@crm", medico.Crm);

     

                    cn.Open();

                    cmd.ExecuteNonQuery();

                    MessageBox.Show("Médico Cadastrado com Sucesso!");

                }

                catch (NpgsqlException ex)

                {

                    MessageBox.Show("Servidor Postgre Erro: " + ex.Code);

                }

                catch (Exception e)

                {

                    MessageBox.Show("Erro: " + e.Message);

                }

                finally

                {

                    cn.Close();

                }

     

     

    No segundo catch, ele da o seguinte erro: Input string was not in a correct format!

    Que erro é esse? os dados são gravados no banco, porém a mensagem sempre aparece.. sou novato nisso rs...

    Desde ja Obrigado!


    • Editado MeOliveira sexta-feira, 6 de maio de 2011 18:14
    sexta-feira, 29 de abril de 2011 17:20

Respostas

  • Finalmente! Consegui resolver o problema :(

    Após muito fuçar e não conseguir nada, fui usar o SqlServer2005 Express mesmo e ao abrir o SQL Server Management Studio Express logo que abriu apareceu o mesmo erro! procurei na net, e encontrei a solução>

    http://support.microsoft.com/kb/919236 

     

    Encontrei a chave, removi e funcionou normalmente! Não sei por que motivo inteferia na aplicação mas felizmente esta resolvido.

    Obrigado a todos! Não era nenhum erro de código :S
    sexta-feira, 6 de maio de 2011 18:13

Todas as Respostas

  • Coloque um breakpoint no inicio de seu método e faça o debug do método, quando ele pular para o cath você saberá a linha que esta ocasionando a Exception. Provalmente é uma string que você esteja passando com caracteres especiais, mas só testando para saber.

    Os dados são inseridos no banco estão integros com os dados imputados?

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    sábado, 30 de abril de 2011 20:43
  • Tens de passar a informacao cerrecta no textbox. Se numero, nao pode ficar vazio ou nao pode receber letra. Voce quer ignorar, entao tens de criar validacoes.

     


    One word frees us of all the weight and pain of life: that word is love.
    domingo, 1 de maio de 2011 17:30
  • Sim, os dados estão integros. Coloquei um breakpoint como disse e ele vai para o catch após chegar na linha cmd.ExecuteNonQuery(); , após isso tem apenas uma MessageBox com uma mensagem de sucesso. Então do cmd.ExecuteNonQuery(); ele ja pula para o catch e não passa pela messagebox.
    segunda-feira, 2 de maio de 2011 11:13
  • Estava verificando um link de uso do prostgresql com .NET, e percebi que os parâmetros são passados de forma diferente, não é utilizado o "@" e sim ":", será que não é isto que possa estar causando o erro?

    Veja o link abaixo:

    http://www.c-sharpcorner.com/UploadFile/john_charles/UsingPostgreSQLfromMicrosoftNET06042009145024PM/UsingPostgreSQLfromMicrosoftNET.aspx

     


    Abraço

    Estevam

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 2 de maio de 2011 21:35
  • Não, ja fiz exemplos com "@" que funcionaram perfeitamente, inclusive o metodo de alterar funciona perfeitamente, e é praticamente um "Copy and Paste" do incluir, apenas mudei o comando sql. Realmente não estou entendendo o que esta causando esse erro.

     

    public void incluir(Medico medico)
        {
          NpgsqlConnection cn = new NpgsqlConnection();
    
          try
          {
            cn.ConnectionString = Dados.StringDeConexao;
            NpgsqlCommand cmd = new NpgsqlCommand();
            cmd.Connection = cn;
            cmd.CommandText = "insert into medico(nomemedico,crm) values(@nomeMedico,@crm);";
            cmd.Parameters.AddWithValue("@nomeMedico", medico.NomeMedico);
            cmd.Parameters.AddWithValue("@crm", medico.Crm);
    
            cn.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Médico Cadastrado com Sucesso!");
          }
          catch (NpgsqlException ex)
          {
            MessageBox.Show("Servidor Postgre Erro: " + ex.Message);
          }
          catch (Exception e)
          {
            MessageBox.Show("Erro: " + e.Message);
          }
          finally
          {
            cn.Close();
          }
        }
    
    
        public void alterar(Medico medico)
        {
          NpgsqlConnection cn = new NpgsqlConnection();
    
          try
          {
            cn.ConnectionString = Dados.StringDeConexao;
            NpgsqlCommand cmd = new NpgsqlCommand();
            cmd.Connection = cn;
            cmd.CommandText = "update medico set nomemedico = @nomeMedico, crm = @crm where idmedico = @idMedico";
            cmd.Parameters.AddWithValue("@idMedico", medico.IdMedico);
            cmd.Parameters.AddWithValue("@nomeMedico", medico.NomeMedico);
            cmd.Parameters.AddWithValue("@crm", medico.Crm);
    
            cn.Open();
            cmd.ExecuteNonQuery();
            MessageBox.Show("Médico alterado com Sucesso!");
          }
          catch (NpgsqlException ex)
          {
            MessageBox.Show("Servidor Postgre Erro: " + ex.Message);
          }
          catch (Exception e)
          {
            MessageBox.Show("Erro: " + e.Message);
          }
          finally
          {
            cn.Close();
          }
        }

    terça-feira, 3 de maio de 2011 11:29
  • Olá,

    A única coisa que vejo de diferente entre o update que está funcionando e o insert que não está funcionando é o ponto e vírgula que você adicionou no final do comando do insert, que você não colocou no update... Você já tentou removê-lo?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quarta-feira, 4 de maio de 2011 17:34
    Moderador
  • Sim, ja removi o ponto e vírgula. Porém o erro persiste. Criei outra classe, para Paciente, com os métodos e acontece a mesma coisa.
    quinta-feira, 5 de maio de 2011 11:03
  • Olá,

    Você já tentou rodar a mesma query direto no banco de dados? Funciona normalmente sem erro?


    André Alves de Lima
    Microsoft MVP - Client App Dev
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    quinta-feira, 5 de maio de 2011 11:35
    Moderador
  • Sim, ja havia testado e fiz novamente apenas modificando o values com os parâmetros

    insert into medico(nomemedico,crm) values ('Jorge',123456) 

     

    Query returned successfully: 1 row affected, 62 ms execution time.

     

    select * from medico

     

    1;"Jose Américo                                                                                        ";"123456   "

    2;"Jorge                                                                                               ";"123456   "

    quinta-feira, 5 de maio de 2011 11:58
  • a sua classe medico, os campos sao do mesmo tipo da base de dados?

    1 - este erro so acontece quando voce define um campo como int e passa um valor string. se voce quer evitar tens de usar tostring()

    2- este erro acontece quando ve define data(date) se o campo estiver vazio entao ele gera este tipo de erro.

     


    One word frees us of all the weight and pain of life: that word is love.
    sexta-feira, 6 de maio de 2011 12:35
  • Base de Dados:

     

    CREATE TABLE medico

    (

      idmedico serial NOT NULL,

      nomemedico character(100) NOT NULL,

      crm character(9) NOT NULL,

      CONSTRAINT medico_pk PRIMARY KEY (idmedico)

    )

     

    classe medico

     

    namespace Sistema.Model

    {

        public class Medico

        {

            private int idMedico;

            private String nomeMedico;

            private String crm;

     

            public int IdMedico

            {

                get { return idMedico; }

                set { idMedico = value; }

            }

     

            public String NomeMedico

            {

                get { return nomeMedico; }

                set { nomeMedico = value; }

            }

     

            public String Crm

            {

                get { return crm; }

                set { crm = value; }

            }

     

        }

    }

    sexta-feira, 6 de maio de 2011 13:25
  • Finalmente! Consegui resolver o problema :(

    Após muito fuçar e não conseguir nada, fui usar o SqlServer2005 Express mesmo e ao abrir o SQL Server Management Studio Express logo que abriu apareceu o mesmo erro! procurei na net, e encontrei a solução>

    http://support.microsoft.com/kb/919236 

     

    Encontrei a chave, removi e funcionou normalmente! Não sei por que motivo inteferia na aplicação mas felizmente esta resolvido.

    Obrigado a todos! Não era nenhum erro de código :S
    sexta-feira, 6 de maio de 2011 18:13