CHAMAR STORED PROCEDURES E FUNCTIONS EM SQL SERVER

USUARIO.EXCLUIDOS 19/04/2007 08:37:46
#212677
Boas galera... Como são feitas as chamadas de procedures e e functions em vb.net 2003 com sql server enviando dados como parãmetro, e se tem como ter algum valor de retorno... E se tiver algum exemplo dessas no banco agradeço...vlw
USUARIO.EXCLUIDOS 19/04/2007 09:27:40
#212688
Resposta escolhida
SP Utilizada
------------

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER PROCEDURE sp_NumeroSequencial
@pNomeCadastro [varchar] (128),
@Id int output

AS
SELECT @Id = SEQ_NUMEROSEQUENCIAL FROM TABELADESEQUENCIAL (updlock)
WHERE SEQ_NOMECADASTRO = @pNomeCadastro

UPDATE TABELADESEQUENCIAL SET SEQ_NUMEROSEQUENCIAL = @Id + 1
WHERE SEQ_NOMECADASTRO = @pNomeCadastro

SELECT @Id as SEQ_NUMEROSEQUENCIAL

RETURN
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Função para acessar a SP

Public Function ObterSequencial(ByVal sNomeCadastro As String) As Integer

Dim oBancoDados As New clsBancoDados
Dim cmdComando As New SqlCommand
Dim NumeroSequencial As Integer

Try
cmdComando.CommandText = "sp_NumeroSequencial"
cmdComando.CommandType = CommandType.StoredProcedure

'Envia parametro para a SP (Store Procedure)
Dim paramNomeCadastro As New SqlParameter
With paramNomeCadastro
.DbType = DbType.String
.Direction = ParameterDirection.Input
.ParameterName = "@pNomeCadastro"
.Size = 128
.Value = sNomeCadastro
End With
cmdComando.Parameters.Add(paramNomeCadastro)

'Cria um parametro para receber o retorno
Dim paramSequencial As New SqlParameter
With paramSequencial
.DbType = DbType.Int32
.Direction = ParameterDirection.Output
.ParameterName = "@Id"
End With
cmdComando.Parameters.Add(paramSequencial)

oBancoDados.ExecutaComando(cmdComando)

'Pega o valor de retorno
NumeroSequencial = CType(cmdComando.Parameters("@Id").Value, Integer)

Return NumeroSequencial

Catch ex As SqlException
Throw ex
Finally
cmdComando.Dispose()
End Try

End Function


Para o parametro de entrada a propriedade Direction = Input e para o parametro de saída a propriedade Direction = OutPut
USUARIO.EXCLUIDOS 19/04/2007 11:19:28
#212713
Cara, em seu codigo esta acontecendo o seguinte:
Qdo chega na linha: cmdComando.CommandText = "sp_NumeroSequencial", dá o seguinte erro:"Referência de objeto não definida para uma instância de um objeto". Nesse codigo tbem nao tem a conexao entre o banco e a var cmdComando, entao fiz o seguinte, troquei essa mesma linha q está dando o erro pela seguinte: cmdComando= New SqlCommand("pc_insertFuncionario", conn)
onde, claro, coloquei minha proc e minha string de conexao com banco, nao esta dando nenhuma exception, porem nao inseri. Acho q nao esta entrando na proc, pois coloco um breakPoint na procedure e vejo q nao entra nesta. Tenho costume com isso em vantive com oracle, no entanto imagino q deveria entrar na proc e parar nos break's se a mesma fosse chamada.
USUARIO.EXCLUIDOS 19/04/2007 12:18:19
#212724
RESOLVI DESSA FORMA, CASO ALGUEM QUEIRA P PESQUISA:

ALTER PROCEDURE pc_insertFuncionario
(
@Nome [char] (10),
@Tel char (10),
@CPF char (10),
@Salario decimal (9)
)
AS
insert into Funcionario (nome,tel,cpf,salario) values(@Nome,@Tel,@CPF,@Salario)
RETURN


 Sub novoRegistro(ByVal pNome As String, ByVal pTel As String, ByVal pCPF As String, ByVal pSal As Double)
Dim sqlInsert As String
Dim cmd As SqlCommand

sqlInsert = "dbo.pc_insertFuncionario"

cmd = New SqlCommand(sqlInsert, conn)'conn é string de conexao com banco
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add(New SqlParameter("@Nome", SqlDbType.Char, 10))
cmd.Parameters("@Nome").Value = pNome

cmd.Parameters.Add(New SqlParameter("@Tel", SqlDbType.Char, 10))
cmd.Parameters("@Tel").Value = pTel

cmd.Parameters.Add(New SqlParameter("@CPF", SqlDbType.Char, 10))
cmd.Parameters("@CPF").Value = pCPF

cmd.Parameters.Add(New SqlParameter("@Salario", SqlDbType.Decimal, 9))
cmd.Parameters("@Salario").Value = pSal

Try
cmd.ExecuteNonQuery()
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
cmd.Dispose()
End Try
End Sub



Tópico encerrado , respostas não são mais permitidas