CHAMAR STORED PROCEDURES E FUNCTIONS EM SQL SERVER
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
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
Para o parametro de entrada a propriedade Direction = Input e para o parametro de saÃÂÂda a propriedade Direction = OutPut
------------
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
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.
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.
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
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