Array
(
)

Erro no metodo?

Raniel Nogueira
   - 13 jan 2014

Pessoal criei um método para verificar o nome de usuario no banco de dados, caso o nome seja ele salva no banco, caso já exista ele retorna um ErroProvider no campo de nome de usuario dizendo que ja existe, oque acontece é que tá verificando direitinho, quando vai salvar retorna a mensagem de que foi cadastrado com sucesso, mais não está sendo salvo no banco, e no Catcj() não retorna nenhum erro também por isso estou achando estranho porque minha String de cadastro no banco está correta, segue abaixo o código do método:
#Código

//Metodo de Inserir Funcionarios
        public static void InserirFuncionario(Funcionario _funcionario, string USUARIO, ErrorProvider erro,ComponentFactory.Krypton.Toolkit.KryptonTextBox caixa)
        {
            using (MySqlConnection conexaoMySQL = clsBanco.getInstancia().getConexao())
            {


                try
                {
                    string mSQL = "SELECT count(*) FROM FUNCIONARIOS WHERE USUARIO=@usuario";
                    MySqlCommand cmd = new MySqlCommand(mSQL, conexaoMySQL);
                    cmd.Parameters.AddWithValue("@usuario", USUARIO);
                    conexaoMySQL.Open();

                    int i = Convert.ToInt16(cmd.ExecuteScalar());

                    if (i == 0)
                    {

                        string _mSQL = "INSERT into funcionarios(NOME,APELIDO,CPF,CARGO,TELEFONE,CELULAR,USUARIO,SENHA) Values('" + _funcionario.NOME + "','" + _funcionario.APELIDO + "','" +
                        _funcionario.CPF + "','" + _funcionario.CARGO + "','" + _funcionario.TELEFONE + "','" + _funcionario.CELULAR + "','" + _funcionario.USUARIO + "','" + _funcionario.SENHA + "')";

                        MySqlCommand _cmd = new MySqlCommand(_mSQL, conexaoMySQL);
                        cmd.ExecuteNonQuery();
                        erro.SetError(caixa, "");
                        MessageBox.Show("Cadastro realizado com sucesso");

                    }
                    if (i > 0)
                    {
                        conexaoMySQL.Close();
                        erro.SetError(caixa, "Já existe um usuario");
                    }
                }
                catch (MySqlException _erro)
                {
                    MessageBox.Show("Erro ao cadastra:" + _erro);
                }
                //
                finally
                {
                    conexaoMySQL.Close();
                }

            }
        }

Pjava
   - 14 jan 2014

Não sei se é isso, mas você está passando uma aspa simples para o banco(','). Isso fará com que ele interprete como um valor para o campo e não separador de campos. Deveria retorna um erro tipo, você passou mais valore que a quantidade de campos, mas também como vc disse não dá erro. Capture a query e execute-a no banco diretamente e veja se dá algum tipo de erro ou se insere dados. Uma coisa observei. Você está passando os valores direto para a query. Dê uma lida sobre injeção de sql. Passe por parâmetros, exatamente como você fez na query de consulta, a primeira antes do insert. Faça isso, é mais bonito e limpo seu código. Tire a aspa simples da vírgula e passe assim(passaria via parâmetroe).
value(" " + minhaclasse.meuvalor + "," + minhaclasse.outrovalor.........

Chiodini
   - 14 jan 2014

Bom dia,

Amigo, primeiramente a dica que eu dou , tente deixar o codigo mais limpo, principalmente nas strigns de comandos,
para facilitar depois a tua vida na conferencia de possiveis erros.
que tal trocar o jeito que esta sendo feito por algo assim.

#Código

MySqlCommand command = new MySqlCommand();

string _mSQL = "INSERT into funcionarios(NOME,APELIDO,CPF,CARGO,TELEFONE,CELULAR,USUARIO,SENHA) Values('@NOME','@APELIDO','@CPF','@CARGO','@TELEFONE','@CELULAR','@USUARIO','@SENHA')";

command.CommandText = SQL;
command.Parameters.Add("@NOME", _userName);
command.Parameters.Add("@APELIDO", _apelido);
command.Parameters.Add("@CPF", _cpf);
command.Parameters.Add("@CARGO", _cargo);
command.Parameters.Add("@TELEFONE", _telefone);
command.Parameters.Add("@CELULAR", _celular);
command.Parameters.Add("@USUARIO", _usuario);
command.Parameters.Add("@SENHA", _senha);

... 


ATt,
Chiodini

Raniel Nogueira
   - 14 jan 2014


Citação:
Não sei se é isso, mas você está passando uma aspa simples para o banco(','). Isso fará com que ele interprete como um valor para o campo e não separador de campos. Deveria retorna um erro tipo, você passou mais valore que a quantidade de campos, mas também como vc disse não dá erro. Capture a query e execute-a no banco diretamente e veja se dá algum tipo de erro ou se insere dados. Uma coisa observei. Você está passando os valores direto para a query. Dê uma lida sobre injeção de sql. Passe por parâmetros, exatamente como você fez na query de consulta, a primeira antes do insert. Faça isso, é mais bonito e limpo seu código. Tire a aspa simples da vírgula e passe assim(passaria via parâmetroe).
value(" " + minhaclasse.meuvalor + "," + minhaclasse.outrovalor.........


Tá ok amigo chegar em casa irei testar, o código está meio feio porque estou tentando descobrir o erro mais pretendo melhorar o código, obrigado pela dica :D

Raniel Nogueira
   - 14 jan 2014


Citação:
Bom dia,

Amigo, primeiramente a dica que eu dou , tente deixar o codigo mais limpo, principalmente nas strigns de comandos,
para facilitar depois a tua vida na conferencia de possiveis erros.
que tal trocar o jeito que esta sendo feito por algo assim.

#Código

MySqlCommand command = new MySqlCommand();

string _mSQL = "INSERT into funcionarios(NOME,APELIDO,CPF,CARGO,TELEFONE,CELULAR,USUARIO,SENHA) Values('@NOME','@APELIDO','@CPF','@CARGO','@TELEFONE','@CELULAR','@USUARIO','@SENHA')";

command.CommandText = SQL;
command.Parameters.Add("@NOME", _userName);
command.Parameters.Add("@APELIDO", _apelido);
command.Parameters.Add("@CPF", _cpf);
command.Parameters.Add("@CARGO", _cargo);
command.Parameters.Add("@TELEFONE", _telefone);
command.Parameters.Add("@CELULAR", _celular);
command.Parameters.Add("@USUARIO", _usuario);
command.Parameters.Add("@SENHA", _senha);

... 


ATt,
Chiodini

Obrigado pelas dicas amigos :-D

Chiodini
   - 14 jan 2014

Mais uma diga
no teu if

Voce compara
if(i == 0)
{}

depois

if (i > 0)

Pra melhorar o codigo você pode colocar um Else antes do segundo IF, para ele soh comparar caso nao entrar no primeiro.

da forma que esta ele vai comparar os dois, mesmo entrando em um ou em outro.

att,
Chiodini

Chiodini
   - 14 jan 2014

Agora falando sobre o teu problema
eu acredito que seja
pq neste caso de insert
ele nao esta fechando a conexao.

conexaoMySQL.Close();

essa instrução ta dentro do segundo IF

ou seja ele nao vai entrar e nao vai fechar a conexao..
tenta fechar a conexão no primeiro if tambem

que vai funcionar

valew
Chiodini

Raniel Nogueira
   - 14 jan 2014


Citação:
Agora falando sobre o teu problema
eu acredito que seja
pq neste caso de insert
ele nao esta fechando a conexao.

conexaoMySQL.Close();

essa instrução ta dentro do segundo IF

ou seja ele nao vai entrar e nao vai fechar a conexao..
tenta fechar a conexão no primeiro if tambem

que vai funcionar

valew
Chiodini


Retirei as aspas, fechei a conexão no segundo IF, mas continua do mesmo jeito :(

Raniel Nogueira
   - 14 jan 2014

Desculpe no primeiro IF

Raniel Nogueira
   - 14 jan 2014

Conseguir resolver, claro com a ajuda de vocês amigos olha só como ficou o código atualizado:

#Código

  public static void InserirFuncionario(Funcionario _funcionario, string USUARIO, ErrorProvider erro,ComponentFactory.Krypton.Toolkit.KryptonTextBox caixa)
        {
            using (MySqlConnection conexaoMySQL = clsBanco.getInstancia().getConexao())
            {


                try
                {
                    string mSQL = "SELECT count(*) FROM FUNCIONARIOS WHERE USUARIO=@usuario";
                    MySqlCommand cmd = new MySqlCommand(mSQL, conexaoMySQL);
                    cmd.Parameters.AddWithValue("@usuario", USUARIO);
                    conexaoMySQL.Open();

                    int i = Convert.ToInt16(cmd.ExecuteScalar());

                    if (i == 0)
                    {
                        /*
                        string _userName = _funcionario.NOME;
                        string _apelido = _funcionario.APELIDO;
                        string _cpf = _funcionario.;
                        string _cargo = _funcionario.NOME;
                        string _telefone = _funcionario.NOME;
                        string _celular = _funcionario.NOME;
                        string _usuario = _funcionario.NOME;
                        string _senha = _funcionario.NOME;
                        */

                        string msql = "INSERT into funcionarios(NOME,APELIDO,CPF,CARGO,TELEFONE,CELULAR,USUARIO,SENHA) Values(@NOME,@APELIDO,@CPF,@CARGO,@TELEFONE,@CELULAR,@USUARIO,@SENHA)";
                        MySqlCommand command = new MySqlCommand(msql, conexaoMySQL);

                        command.Parameters.AddWithValue("@NOME", _funcionario.NOME);
                        command.Parameters.AddWithValue("@APELIDO", _funcionario.APELIDO);
                        command.Parameters.AddWithValue("@CPF", _funcionario.CPF);
                        command.Parameters.AddWithValue("@CARGO", _funcionario.CARGO);
                        command.Parameters.AddWithValue("@TELEFONE", _funcionario.TELEFONE);
                        command.Parameters.AddWithValue("@CELULAR", _funcionario.CELULAR);
                        command.Parameters.AddWithValue("@USUARIO", _funcionario.USUARIO);
                        command.Parameters.AddWithValue("@SENHA", _funcionario.SENHA);
                        command.ExecuteNonQuery();
                        erro.SetError(caixa, "");
                        MessageBox.Show("Cadastro realizado com sucesso");
                        conexaoMySQL.Close();

                    }
                    if (i > 0)
                    {
                        conexaoMySQL.Close();
                        erro.SetError(caixa, "Já existe um usuario");
                    }
                }
                catch (MySqlException _erro)
                {
                    MessageBox.Show("Erro ao cadastar:" + _erro);
                }
                //
                finally
                {
                    conexaoMySQL.Close();
                }

            }
        }


#Código
MessageBox.Show("Obrigado a todos os amigos que colaboraram :D","Alerta")

Chiodini
   - 15 jan 2014

Rs.

Show de Bola...

Att,

Raniel Nogueira
   - 15 jan 2014

Vlw amigo obrigado.