COMO PEGAR RETORNOS DE UMA PROCEDURE

HORICH 04/07/2013 12:19:27
#425564
Boa tarde amigos,

Eu estou tentando pegar um valor que uma procedure de SQL me retorna por exemplo:

Procedure:

create proc nome_procedure

nome as char(50),
rg as chat(30)

as

declare @codigo_Interno numeric

if (select count(*) from tabela) = 0
select @codigo_Interno = 1
else
select @codigo_Interno = max(cod_tabela +1) from tabela

insert into tabelavalues (@nome, @rg)

select errno = 0,
errmsg = [ô][ô],
CodigoDeRetorno= @codigo_Interno
return



Eu queria saber se tem como pegar este CodigoDeRetorno


O meio que eu estou chamando a procedure é assim:

Try

[ô]Procedure nome_procedure
SQL = [Ô]nome_procedure[Ô]

[ô]Nome
SQL = SQL & [Ô][ô][Ô] & txtnome.Text & [Ô][ô], [Ô]

[ô]RG
SQL = SQL & [Ô][ô][Ô] & txtRG.Text & [Ô][ô][Ô]

Dim cm As New SqlClient.SqlCommand(SQL, oSQLConn)

cm.ExecuteNonQuery()

Catch ex As Exception
MessageBox.Show(ex.Message, [Ô]Erro generico[Ô])
End Try


Ai como eu poderia fazer para pegar o código de retorno ?
HORICH 04/07/2013 17:07:41
#425573
Alguem ?
JP.RAMOS 05/07/2013 07:52:50
#425591
Para pegar o retorno faça assim:

dim codigoretorno as int32
codigoretorno = cmd.ExecuteScalar

JP
HORICH 05/07/2013 08:35:06
#425592
Certo, Mais quando a procedure retorna mais de um valor ?
HORICH 05/07/2013 09:09:20
#425594
Olha eu montei assim:

Citação:

[ô]Procedure dj_sp_inc_nf_cpr
SQL = [Ô]dj_sp_inc_nf_cpr [Ô]

Dim cm As New SqlClient.SqlCommand(SQL, oSQLConn)

[ô]Numero da NFe
cm.Parameters.AddWithValue([Ô]@u_num_nf[Ô], lbl_num_pv.Text)

[ô]Data da Emissaão
cm.Parameters.AddWithValue([Ô]@d_dat_emi[Ô], FormataDataeHoraBD(lbl_dat_proc.Text, True))

[ô]Valor total da NF-e
cm.Parameters.AddWithValue([Ô]@v_vlr_tot_nf[Ô], Str(ConsisteValorBD(lbl_tot_nf.Text)))

[ô]Codigo do Cliente
cm.Parameters.AddWithValue([Ô]@u_cod_cli[Ô], BuscaCodCli(lbl_cnpj_emi.Text))

[ô]Data de Atualização
cm.Parameters.AddWithValue([Ô]@d_atualiza[Ô], FormataDataeHoraBD(Today(), False))

[ô]Usuario que Atualizou
cm.Parameters.AddWithValue([Ô]@c_usu_con[Ô], 0)

[ô]Data da Entrega
cm.Parameters.AddWithValue([Ô]@d_dat_etg[Ô], FormataDataeHoraBD(txt_dat_entrega.Text, False))

[ô]Codigo do Pedido De Compra
cm.Parameters.AddWithValue([Ô]@u_cod_ped_cpr[Ô], txt_cod_ped_cpr.Text)

[ô]Serie
cm.Parameters.AddWithValue([Ô]@t_serie[Ô], [Ô][ô]0[ô][Ô])

[ô]CFOP Da nota
cm.Parameters.AddWithValue([Ô]@u_cfop[Ô], 0)

[ô]CFOP e
cm.Parameters.AddWithValue([Ô]@u_cfop_e[Ô], 0)

[ô]Base do ICMS ST
cm.Parameters.AddWithValue([Ô]@v_base_icms_st[Ô], 0)

[ô]Valor do ICMS ST
cm.Parameters.AddWithValue([Ô]@v_vlr_icms_st[Ô], 0)

[ô]Valor do Frete
cm.Parameters.AddWithValue([Ô]@v_vlr_frete[Ô], Trim(Str(ConsisteValorBD(lbl_tot_frete.Text))))

[ô]Valor do Seguro
cm.Parameters.AddWithValue([Ô]@v_vlr_seguro[Ô], Trim(Str(ConsisteValorBD(lbl_tot_seg.Text))))

[ô]Valor do Desconto
cm.Parameters.AddWithValue([Ô]@v_vlr_desc[Ô], Trim(Str(ConsisteValorBD(lbl_tot_desc.Text))))

[ô]Outras despesas
cm.Parameters.AddWithValue([Ô]@v_outras_desp[Ô], Trim(Str(ConsisteValorBD(lbl_tot_out.Text))))

Try
[ô]Retorno da Procedure
CodIntNFCpr = Convert.ToInt32(cm.ExecuteScalar())

Catch ex As Exception
CodIntNFCpr = 0
MessageBox.Show(ex.Message, [Ô]Erro generico[Ô], MessageBoxButtons.OK,
MessageBoxIcon.Error,MessageBoxDefaultButton.Button2)
End Try



Ai quando Vou executar ele da um erro assim:

[Ô]O procedimento ou a função [ô]dj_sp_inc_nf_cpr[ô] espera o parâmetro [ô]@u_num_nf[ô], que não foi fornecido.[Ô]

Mais eu estou passando o Parâmetro e ele esta indo com um valor, não esta indo em branco =s
O que seria?

FELLIPEASSIS 05/07/2013 21:03:01
#425637
na string vc tem q colocar os parametros assim
EX: sql=[Ô]Execute proc_Inc_Cliente @codigo,@nome,@datnasc,@cpf[Ô]
depois
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], txtcodigo.Text.Trim())
HORICH 10/07/2013 08:36:06
#425792
Entendi, assim esse feriado passei meio que quebrando a cabeça com isso, achei que essa forma de informar seria muito complexa pelo menos para mim rs

Olha uma forma que eu consegui achar de contornar esta situação

Minha Procedure:


Citação:

dj_sp_inc_nf_cpr

@u_num_nf as numeric,
@d_dat_emi as datetime,
@v_vlr_tot_nf as float,
@u_cod_cli as numeric,
@d_atualiza as datetime,
@c_usu_con as numeric,
@d_dat_etg as datetime,
@u_cod_ped_cpr as numeric,
@t_serie as char(5),
@u_cfop as numeric,
@u_cfop_e as numeric,
@v_base_icms_st as float,
@v_vlr_icms_st as float,
@v_vlr_frete as float,
@v_vlr_seguro as float,
@v_vlr_desc as float,
@v_outras_desp as float


as

declare @u_cod_int_cpr numeric

if (select count(*) from dj_tb_cpr) = 0
select @u_cod_int_cpr = 1
else
select @u_cod_int_cpr = max(u_cod_int_cpr +1) from dj_tb_cpr

If (select Count(*) from dj_tb_cpr where u_cod_int_cpr = @u_cod_int_cpr) > 0

Begin
SELECT errno = 30112,
errmsg = [ô]Nota Fiscal ja Existe[ô]
return
End

insert into dj_tb_cpr values (@u_cod_int_cpr, @u_num_nf, @d_dat_emi, @v_vlr_tot_nf,
@u_cod_cli,@d_atualiza,@c_usu_con,@d_dat_etg,
@u_cod_ped_cpr,@t_serie,@u_cfop, @u_cfop_e, @v_base_icms_st,
@v_vlr_icms_st, @v_vlr_frete, @v_vlr_seguro, @v_vlr_desc,
@v_outras_desp)

select errno = 0,
errmsg = [ô][ô],
CodNfCpr = @u_cod_int_cpr --Este é o Retorno
return



Ai o Modo de executar no VB eu fiz assim:
Citação:

[ô]Procedure
SQL = [Ô]dj_sp_inc_nf_cpr [Ô]
[ô]Numero da NFe
SQL = SQL & lbl_num_pv.Text & [Ô], [Ô]

[ô]Data da Emissão
SQL = SQL & [Ô][ô][Ô] & FormataDataeHoraBD(lbl_dat_proc.Text, True) & [Ô][ô], [Ô]

[ô]Valor Total da NFe
SQL = SQL & Str(ConsisteValorBD(lbl_tot_nf.Text)) & [Ô], [Ô]

[ô]Codigo do Cliente
[ô]SQL = SQL & BuscaCodCli(lbl_cnpj_emi.Text) & [Ô], [Ô]
SQL = SQL & lbl_cnpj_emi.Text & [Ô], [Ô]

[ô]Data de atualização
SQL = SQL & [Ô][ô][Ô] & FormataDataeHoraBD(Today(), False) & [Ô][ô], [Ô]

[ô]Usuario que atualizou
SQL = SQL & 0 & [Ô], [Ô]

[ô]Data da Entrega
SQL = SQL & [Ô][ô][Ô] & FormataDataeHoraBD(txt_dat_entrega.Text, False) & [Ô][ô], [Ô]

[ô]Codigo do Pedido de Compra
SQL = SQL & txt_cod_ped_cpr.Text & [Ô], [Ô]

[ô]Serie
SQL = SQL & [Ô][ô]0[ô], [Ô]

[ô]CFOP da Nota
SQL = SQL & [Ô]0, [Ô]

[ô]CFOP e
SQL = SQL & [Ô]0, [Ô]

[ô]Base do ICMS ST
SQL = SQL & [Ô]0, [Ô]

[ô]Valor do ICMS ST
SQL = SQL & [Ô]0, [Ô]

[ô]Valor do Frete
SQL = SQL & Trim(Str(ConsisteValorBD(lbl_tot_frete.Text))) & [Ô], [Ô]

[ô]Valor do Seguro
SQL = SQL & Trim(Str(ConsisteValorBD(lbl_tot_seg.Text))) & [Ô], [Ô]

[ô]Valor do Desconto
SQL = SQL & Trim(Str(ConsisteValorBD(lbl_tot_desc.Text))) & [Ô], [Ô]

[ô]Outras despesas
SQL = SQL & Trim(Str(ConsisteValorBD(lbl_tot_out.Text)))


Dim cm As New SqlClient.SqlCommand(SQL, oSQLConn)
Dim dr As SqlClient.SqlDataReader


Try
dr = cm.ExecuteReader
If dr.HasRows Then
While dr.Read
CodIntNFCpr = dr.Item([Ô]CodNfCpr[Ô])
End While
End If
[ô]Retorno da Procedure
[ô]CodIntNFCpr = Convert.ToInt32(cm.ExecuteScalar())

Catch ex As Exception
CodIntNFCpr = 0
MessageBox.Show(ex.Message, [Ô]Erro generico[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2)
Finally
dr.Close()
End Try




Não sei Vocês mais eu achei mais fácil fazer desta forma, por que é um select que esta me retornando os valores, e eu passo em forma de String minha procedure e faço o VB pegar o que retorna de forma tabular

Obrigado pela ajuda pessoal, caso alguém queria consultar o modo que eu fiz ta ai xD
Tópico encerrado , respostas não são mais permitidas