none
erro em chamada da procedure - e pegar valores retornados da procedure RRS feed

  • Pergunta

  • pessoal estou tentando executar uma procedure que está no sql.

    minha procedure recebe 4 parametros

        @cod_cia         Numeric(2),
        @cod_sector         Numeric(3),
        @cod_ramo         Numeric(3),
        @num_certificado Varchar(17)

    para chamar a procecure eu faço isso:

                SqlConnection sCn = new SqlConnection();

                Classes_Banco.clsAcessoDados bd = new Classes_Banco.clsAcessoDados();

                sCn = bd.Conexao_SQL("server", "base", "usuario", "senha");

                //chama procedure da B1
                SqlCommand cmd = new SqlCommand();
                cmd = sCn.CreateCommand();
                cmd.CommandText = "sp_send_oracle_b1";
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@cod_cia", SqlDbType.Int, 4, "20");
                cmd.Parameters.Add("@cod_sector", SqlDbType.Int, 4, "93");
                cmd.Parameters.Add("@cod_ramo", SqlDbType.Int, 4, "934");
                cmd.Parameters.Add("@num_certificado", SqlDbType.VarChar, 17, "12456872200521462");

                cmd.ExecuteNonQuery();

                //fecha conexão
                if (sCn.State != ConnectionState.Closed)
                {
                    sCn.Close();
                }

    porém está dando esse erro  Procedure or function 'sp_send_oracle_b1' expects parameter '@cod_cia', which was not supplied.

    na linha cmd.ExecuteNonQuery();

    por que?

    e aproveitando: essa mina procedure vai retornar alguns campos e eu queria saber como posso pegar os dados que ela está retornando para fazer um insert numa tabela?
    quinta-feira, 12 de março de 2009 19:06

Respostas

  • Tente mudar os seus parâmetros para o seguinte:

    cmd.Parameters.AddWithValue("@cod_cia", 20);  
    cmd.Parameters.AddWithValue("@cod_sector", 93);  
    cmd.Parameters.AddWithValue("@cod_ramo", 934);  
    cmd.Parameters.AddWithValue("@num_certificado""12456872200521462"); 

    Para receber os valores, se forem output da procedure, então faça da seguinte forma (antes do cmd.ExecuteNonQuery) :

    SqlParameter parametroSaida = new SqlParameter("@SeuParametro",SqlDbType.NChar,50);  
    parametroSaida.ParameterDirection = System.Data.ParameterDirection.Output;  
    cmd.Parameters.Add(parametroSaida); 

    E depois do cmd.ExecuteNonQuery(), use da seguinte forma:

    string valorDaProcedure =(string) cmd.Parameters["@SeuParametro"].Value;

    Espero que isso ajude.
    Rafael Medeiros
    • Sugerido como Resposta RMedeiros segunda-feira, 16 de março de 2009 17:31
    • Marcado como Resposta Rafael FagundesModerator segunda-feira, 16 de março de 2009 19:04
    quinta-feira, 12 de março de 2009 22:52