none
procedure RRS feed

  • Pergunta

  • Tenho o seguinte codigo 

     private void NovoUsuario(string Nome, string usuario, string senha, string Perfil)
            {
    
                using (MySqlConnection conexao = new MySqlConnection(strConexao))
                {
                    using (MySqlCommand commandMysql = new MySqlCommand("sp_NovoUsuario", conexao))
                    {
    
                        
                     
                        try
                        {
                            commandMysql.Parameters.AddWithValue("Nome", Nome);
                            commandMysql.Parameters.AddWithValue("Usuario", usuario);
                            commandMysql.Parameters.AddWithValue("Senha", senha);
                            commandMysql.Parameters.AddWithValue("Perfil", Perfil);
                            conexao.Open();
                            commandMysql.ExecuteNonQuery();
    
    
                            UsuarioCadastrado = true;
                        }
                        catch
                        {
                            UsuarioCadastrado = false;
                        }
                        finally
                        {
                            conexao.Close();
    
                        }
                    }
                }
            }

    e a seguinte procedure

    DELIMITER $$
    
    USE `hagnis`$$
    
    DROP PROCEDURE IF EXISTS `sp_NovoUsuario`$$
    
    CREATE DEFINER=`hagnis`@`%` PROCEDURE `sp_NovoUsuario`(sp_Nome VARCHAR(50), sp_usuario VARCHAR(10), sp_senha VARCHAR(10), sp_Perfil VARCHAR(15))
    BEGIN
    	IF ( EXISTS (SELECT  usuario FROM Usuario WHERE (usuario = sp_usuario )))THEN
    	
    	SELECT 'usuario ja existe 'AS msg;
    	
    	ELSE
    		
    	INSERT INTO Usuario (Nome,usuario,Senha,Perfil)   VALUES(sp_Nome,sp_Usuario,sp_Senha,sp_Perfil);
    	SELECT 'Usuário cadastrado com sucesso! 'AS msg;
    
    	END IF;
    	
        END$$
    
    DELIMITER ;

    Mais eu não estou conseguindo inserir da o seguinte error 



    "incorret number of arguments for PROCEDURE  hagnis.sp_NovoUsuario; expected 4 , got

    ()"


    Alguem poderia me ajudar ?

    quarta-feira, 17 de abril de 2013 21:01

Respostas

  • Caso alguem tenha a mesma duvida que eu , faltou esse comando aqui 


     commandMysql.CommandType = CommandType.StoredProcedure;
    
    
    
    
    
    
                            commandMysql.Parameters.AddWithValue("sp_Nome", Nome);
                            commandMysql.Parameters.AddWithValue("sp_Usuario", usuario);
                            commandMysql.Parameters.AddWithValue("sp_Senha", senha);
                            commandMysql.Parameters.AddWithValue("sp_Perfil", Perfil);

    Mais ainda assim nao consigo usar @parametro dentro das procedures

    se alguem souber 

    quarta-feira, 17 de abril de 2013 21:47

Todas as Respostas

  • Voce definiu na procedure os nomes de variavel como 

    sp_Nome

    sp_usuario

    etc

    Mas quando passa os valores esta passando com o nome errado, o certo é

    commandMysql.Parameters.AddWithValue("sp_nome", Nome);
                            commandMysql.Parameters.AddWithValue("sp_usuario", usuario);
                            commandMysql.Parameters.AddWithValue("sp_senha", senha);
                            commandMysql.Parameters.AddWithValue("sp_perfil", Perfil);

    Geralmente utilizam o prefixo sp_ para definir o nome da procedure, dentro da mesma as variaveis utilizam @

    ex:

    @nome varchar(50)

    @usuario varchar(50)

    etc

    quarta-feira, 17 de abril de 2013 21:08
  • mais la nao aceita eu colocar o @


    quarta-feira, 17 de abril de 2013 21:15
  • O @ faz parte em algumas documentações de boa pratica, você precisa apenas deixar o mesmo nome da variável que esta na Procedure com o mesmo nome que esta nos parâmetros no c#

    commandMysql.Parameters.AddWithValue("sp_usuario", usuario);

    quarta-feira, 17 de abril de 2013 21:21
  • Quando eu chego nessa linha  commandMysql.ExecuteNonQuery(); ele da o seguinte erro 

    incorrect number of arguments for procedure hagnis.sp_novoUsuario;expected 4, got()

    o mesmo erro , mesmo mudando para sp_nome

    quarta-feira, 17 de abril de 2013 21:26
  • Caso alguem tenha a mesma duvida que eu , faltou esse comando aqui 


     commandMysql.CommandType = CommandType.StoredProcedure;
    
    
    
    
    
    
                            commandMysql.Parameters.AddWithValue("sp_Nome", Nome);
                            commandMysql.Parameters.AddWithValue("sp_Usuario", usuario);
                            commandMysql.Parameters.AddWithValue("sp_Senha", senha);
                            commandMysql.Parameters.AddWithValue("sp_Perfil", Perfil);

    Mais ainda assim nao consigo usar @parametro dentro das procedures

    se alguem souber 

    quarta-feira, 17 de abril de 2013 21:47