none
Inserir dados via código no banco acess. RRS feed

  • Pergunta

  • Galera, boa noite !

    Estou com problemas ao inserir dados no banco acess, a mensagem é...

    "Nenhum valor foi fornecido para um ou mais parâmetros necessários."

    segue abaixo o código

     public string InserirAluno(Aluno_TO p)
            {
                // conexão já inicializada no construtor
                OleDbConnection conn = new OleDbConnection(strconn);
                conn.Open();
                OleDbTransaction transacao = conn.BeginTransaction();
                StringBuilder sb = new StringBuilder();
                String sqlProduto = "INSERT INTO Alunos ([NOME], [NASCIMENTO], [TEL], [F_PAI], [F_MAE], [ENDERECO], [BAIRRO], [CIDADE], [CEP], [E-MAIL], [E-MAIL_RESP], [ESCOLA], [CLASSE], [RESPONSAVEL], [RESPONSAVEL2], [RESPONSAVEL3], [CELULAR], [NEXTEL], [IMAGEM], [TIPO], [MES]) VALUES (@NOME, @NASCIMENTO, @TEL, @F_PAI, @F_MAE, @ENDERECO, @BAIRRO, @CIDADE, @CEP, @E-MAIL, @E-MAIL_RESP, @ESCOLA, @CLASSE, @RESPONSAVEL, @RESPONSAVEL2, @RESPONSAVEL3, @CELULAR, @NEXTEL, @IMAGEM, @TIPO, @MES)";
                OleDbCommand cmdProduto = new OleDbCommand(sqlProduto, conn, transacao);
                cmdProduto.Parameters.AddWithValue("@NOME", p.Nome);
                cmdProduto.Parameters.AddWithValue("@NASCIMENTO", p.Idade);
                cmdProduto.Parameters.AddWithValue("@TEL", p.Tel);
                cmdProduto.Parameters.AddWithValue("@F_PAI", p.Pai);
                cmdProduto.Parameters.AddWithValue("@F_MAE", p.Mae);
                cmdProduto.Parameters.AddWithValue("@ENDERECO", p.Endereco);
                cmdProduto.Parameters.AddWithValue("@BAIRRO", p.Bairro);
                cmdProduto.Parameters.AddWithValue("@CIDADE", p.Cidade);
                cmdProduto.Parameters.AddWithValue("@CEP", p.Cep);
                cmdProduto.Parameters.AddWithValue("@E-MAIL", p.Email);
                cmdProduto.Parameters.AddWithValue("@E-MAIL_RESP", p.Email_resp);
                cmdProduto.Parameters.AddWithValue("@ESCOLA", p.Escola);
                cmdProduto.Parameters.AddWithValue("@CLASSE", p.Classe);
                cmdProduto.Parameters.AddWithValue("@RESPONSAVEL", p.Responsavel1);
                cmdProduto.Parameters.AddWithValue("@RESPONSAVEL2", p.Responsavel2);
                cmdProduto.Parameters.AddWithValue("@RESPONSAVEL3", p.Reponsavel3);
                cmdProduto.Parameters.AddWithValue("@CELULAR", p.Celular);
                cmdProduto.Parameters.AddWithValue("@NEXTEL", p.Nextel);
                cmdProduto.Parameters.AddWithValue("@IMAGEM", p.Imagem);
                cmdProduto.Parameters.AddWithValue("@TIPO", p.Tipo);
                cmdProduto.Parameters.AddWithValue("@MES", p.Mes);
                cmdProduto.ExecuteNonQuery();
                

                
                transacao.Commit();
                return "";
            }

    Obs.: É válido lembrar que verifiquei os nomes das colunas do BD, estão todos ok.

    efetuei o teste com o bd em sql e foi sem problemas.

    retirei o "@" e continua na mesma.

    Help !!!

    Grande abraço !


    Jimi Anderson

    segunda-feira, 16 de julho de 2012 23:18

Respostas

  • Olá Jimi,

    Sim, o INSERT não exige a passagem do ID, pois ele é gerado automaticamente.

    Substitua os parâmetros por valores contantes no seu comando SQL, e gradativamente vá adicionando-os de volta.

    Faça assim:

    1 - Comece com apenas alguns parâmetros:

     String sqlProduto = "INSERT INTO Alunos ([NOME], [NASCIMENTO], [TEL], [F_PAI], [F_MAE], [ENDERECO], [BAIRRO], [CIDADE], [CEP], [E-MAIL], [E-MAIL_RESP], [ESCOLA], [CLASSE], [RESPONSAVEL], [RESPONSAVEL2], [RESPONSAVEL3], [CELULAR], [NEXTEL], [IMAGEM], [TIPO], [MES]) VALUES (@NOME, @NASCIMENTO, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', NULL, '', 1)";
                OleDbCommand cmdProduto = new OleDbCommand(sqlProduto, conn, transacao);
                cmdProduto.Parameters.AddWithValue("@NOME", p.Nome);
                cmdProduto.Parameters.AddWithValue("@NASCIMENTO", p.Idade);
                //cmdProduto.Parameters.AddWithValue("@TEL", p.Tel);
                //cmdProduto.Parameters.AddWithValue("@F_PAI", p.Pai);
                //cmdProduto.Parameters.AddWithValue("@F_MAE", p.Mae);
                //cmdProduto.Parameters.AddWithValue("@ENDERECO", p.Endereco);
                //cmdProduto.Parameters.AddWithValue("@BAIRRO", p.Bairro);
                //cmdProduto.Parameters.AddWithValue("@CIDADE", p.Cidade);
                //cmdProduto.Parameters.AddWithValue("@CEP", p.Cep);
                //cmdProduto.Parameters.AddWithValue("@E-MAIL", p.Email);
                //cmdProduto.Parameters.AddWithValue("@E-MAIL_RESP", p.Email_resp);
                //cmdProduto.Parameters.AddWithValue("@ESCOLA", p.Escola);
                //cmdProduto.Parameters.AddWithValue("@CLASSE", p.Classe);
                //cmdProduto.Parameters.AddWithValue("@RESPONSAVEL", p.Responsavel1);
                //cmdProduto.Parameters.AddWithValue("@RESPONSAVEL2", p.Responsavel2);
                //cmdProduto.Parameters.AddWithValue("@RESPONSAVEL3", p.Reponsavel3);
                //cmdProduto.Parameters.AddWithValue("@CELULAR", p.Celular);
                //cmdProduto.Parameters.AddWithValue("@NEXTEL", p.Nextel);
                //cmdProduto.Parameters.AddWithValue("@IMAGEM", p.Imagem);
                //cmdProduto.Parameters.AddWithValue("@TIPO", p.Tipo);
                //cmdProduto.Parameters.AddWithValue("@MES", p.Mes);
                cmdProduto.ExecuteNonQuery();
                

    2 - Depois vá adicionando-os de volta aos poucos, assim vc encontrará o parâmetro que esta com problema.

    obs.: coloquei '' na maioria dos campos da sua query, mas provavelmente algum deles seja do tipo inteiro. vc terá de ajustar isso conforme for testando.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:12
    • Não Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:12
    • Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:20
    terça-feira, 17 de julho de 2012 02:21
    Moderador
  • Amigão... valeu mesmo.

    Consegui achar o problema aqui.

                          

    As nomeclaturas utilizadas para os campos da tabela estão me dando problema, acredito que seja devido aos caracteres diferentes como " - _ 2 3.

               E-MAIL
               E-MAIL_RESP
               RESPONSAVEL2
               RESPONSAVEL3

    Renomiei as colunas aqui e funcionou de boa, Obrigado e fique com Deus !!!


    Jimi Anderson

    • Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:24
    terça-feira, 17 de julho de 2012 03:20

Todas as Respostas

  • Olá Jimi,

    Será que nenhum dos parâmetros que vc esta passando para o comando não deixaram de ser valorizados e estão passando NULL ou BRANCO para alguma coluna obrigatória?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 17 de julho de 2012 00:31
    Moderador
  • Olá Fernando, obrigado pela atenção ! Bom... eu já verifiquei esse detalhe, e estou passando todos direitinho, nenhum como NULL ou BRANCO. Só pra você ter idéia, coloquei todos os campos da tabela para texto e o único que possui obrigatoriedade é o campo código, mas este campo gera o código automaticamente. Desculpe a minha ignorância, pois ainda estou engatinhado no c#. Eu não necessito de passar o Código para inserir um novo, certo ? Visto que ele já está no auto Incremento. Se eu estiver errado, por favor me corrija ! Grande abraço !

    Jimi Anderson

    terça-feira, 17 de julho de 2012 02:00
  • Olá Jimi,

    Sim, o INSERT não exige a passagem do ID, pois ele é gerado automaticamente.

    Substitua os parâmetros por valores contantes no seu comando SQL, e gradativamente vá adicionando-os de volta.

    Faça assim:

    1 - Comece com apenas alguns parâmetros:

     String sqlProduto = "INSERT INTO Alunos ([NOME], [NASCIMENTO], [TEL], [F_PAI], [F_MAE], [ENDERECO], [BAIRRO], [CIDADE], [CEP], [E-MAIL], [E-MAIL_RESP], [ESCOLA], [CLASSE], [RESPONSAVEL], [RESPONSAVEL2], [RESPONSAVEL3], [CELULAR], [NEXTEL], [IMAGEM], [TIPO], [MES]) VALUES (@NOME, @NASCIMENTO, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', NULL, '', 1)";
                OleDbCommand cmdProduto = new OleDbCommand(sqlProduto, conn, transacao);
                cmdProduto.Parameters.AddWithValue("@NOME", p.Nome);
                cmdProduto.Parameters.AddWithValue("@NASCIMENTO", p.Idade);
                //cmdProduto.Parameters.AddWithValue("@TEL", p.Tel);
                //cmdProduto.Parameters.AddWithValue("@F_PAI", p.Pai);
                //cmdProduto.Parameters.AddWithValue("@F_MAE", p.Mae);
                //cmdProduto.Parameters.AddWithValue("@ENDERECO", p.Endereco);
                //cmdProduto.Parameters.AddWithValue("@BAIRRO", p.Bairro);
                //cmdProduto.Parameters.AddWithValue("@CIDADE", p.Cidade);
                //cmdProduto.Parameters.AddWithValue("@CEP", p.Cep);
                //cmdProduto.Parameters.AddWithValue("@E-MAIL", p.Email);
                //cmdProduto.Parameters.AddWithValue("@E-MAIL_RESP", p.Email_resp);
                //cmdProduto.Parameters.AddWithValue("@ESCOLA", p.Escola);
                //cmdProduto.Parameters.AddWithValue("@CLASSE", p.Classe);
                //cmdProduto.Parameters.AddWithValue("@RESPONSAVEL", p.Responsavel1);
                //cmdProduto.Parameters.AddWithValue("@RESPONSAVEL2", p.Responsavel2);
                //cmdProduto.Parameters.AddWithValue("@RESPONSAVEL3", p.Reponsavel3);
                //cmdProduto.Parameters.AddWithValue("@CELULAR", p.Celular);
                //cmdProduto.Parameters.AddWithValue("@NEXTEL", p.Nextel);
                //cmdProduto.Parameters.AddWithValue("@IMAGEM", p.Imagem);
                //cmdProduto.Parameters.AddWithValue("@TIPO", p.Tipo);
                //cmdProduto.Parameters.AddWithValue("@MES", p.Mes);
                cmdProduto.ExecuteNonQuery();
                

    2 - Depois vá adicionando-os de volta aos poucos, assim vc encontrará o parâmetro que esta com problema.

    obs.: coloquei '' na maioria dos campos da sua query, mas provavelmente algum deles seja do tipo inteiro. vc terá de ajustar isso conforme for testando.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:12
    • Não Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:12
    • Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:20
    terça-feira, 17 de julho de 2012 02:21
    Moderador
  • Amigão... valeu mesmo.

    Consegui achar o problema aqui.

                          

    As nomeclaturas utilizadas para os campos da tabela estão me dando problema, acredito que seja devido aos caracteres diferentes como " - _ 2 3.

               E-MAIL
               E-MAIL_RESP
               RESPONSAVEL2
               RESPONSAVEL3

    Renomiei as colunas aqui e funcionou de boa, Obrigado e fique com Deus !!!


    Jimi Anderson

    • Marcado como Resposta Anderson Mac terça-feira, 17 de julho de 2012 03:24
    terça-feira, 17 de julho de 2012 03:20