Usando Procedimentos Armazenados - II


No artigo - ADO - Usando procedimentos armazenados - mostramos como usar uma SP (Stored Procedure) em um banco de dados SQL Server , vamos dar continuidade ao artigo indo um pouco além.

Parâmetros de Entrada

Vamos examinar outra SP armazenada no banco de dados SQL Server ( estou usando a  versão 2000 para desktop ) . A escolhida foi a SP - CustOrdersOrders  ,   siga os passos:

Fig 1.0 - Enterprise Manager exibindo as Stored Procedures armazenadas no banco de dados  Northwind
  1. CREATE PROCEDURE CustOrdersOrders 
  2.       @CustomerID nchar(5)
  3. AS
  4. SELECT OrderID, 
    OrderDate,
    RequiredDate,
    ShippedDate
  5. FROM Orders
    WHERE CustomerID = @CustomerID
    ORDER BY OrderID

Fig 2.0 - A SP CustOrdersOrders  Fig 3.0 - A janela Stored Procedure Properties - exibindo a SP 

Como podemos observar que SP CustOrdersOrders possui um parâmetro de entrada :  @CustomerID nchar(5).

Os parâmetros de entrada são valores que enviamos a um procedimento armazenado , eles podem ser de qualquer tipo de dados suportado pela T-SQL . Vamos debulhar o código desta SP ; vejamos linha a linha:

Escolhemos esta SP pela sua simplicidade , mas as SP podem ser muito complexas , com muitos parâmetros de entrada com muitas opções de seleção.

Parâmetros de Saida - OUTPUT

Os parâmetros de saída são usados para retornar valores de uma SP . Usamos os parâmetros de saída quando desejamos retornar valores únicos e não um conjunto de registros (Recordset). Podemos usar qualquer tipo de dados T-SQL nos parâmetros de saida exceto os tipos :  text ,  ntext e image.

Vamos criar uma SP usando um parâmetro de saida para exemplificar.  Iremos usar a tabela Orders e desejamos obter  as últimas datas de embarque ShippedDate efetuadas para o Brazil . Vamos chamar esta SP de ShippingBrazil. Nosso parâmetro de saída será a coluna ShippedDate

O código para criar nossa SP é o seguinte:

CREATE PROCEDURE ShippingBrazil

        @ShippedDate datetime OUTPUT

AS

SELECT @ShippedDate = MAX(ShippedDate) FROM Orders

     WHERE ShipCountry = 'Brazil'

Observe nosso parâmetro de saida declarado usando a palavra-chave OUTPUT - @ShippedDate datetime OUTPUT.

A instrução a seguir irá selecionar  ( SELECT  ) as últimas datas de embarques ( @ShippedDate = MAX(ShippedDate) ) da tabela Orders  quando o país for o Brasil -    WHERE ShipCountry = 'Brazil'

Podemos usar a ADO para recuperar o parâmetro de saída usando a coleção Parameters do objeto Command.

Vimos na primeira parte deste artigo como chamar uma SP usando ADO . Nossa SP não possuía nenhum parâmetro de entrada nem de saída.  Que tal mostrar como chamar a SP CustOrdersOrders comentada no ínicio deste artigo ? 

A SP CustOrdersOrders possui um parâmetro de entrada e retorna um Recordset . Para chamar um procedimento armazenado  deste tipo com ADO podemos usar o método Execute , assim:

conexao.EXECUTE nome_da_SP paremetro1, parametro2, ...

O código completo é o seguinte:

Private Sub Command1_Click()

Dim conexao As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim strSQL As String

Set conexao = CreateObject("ADODB.Connection")

conexao.Open "Provider=SQLOLEDB;" & _
"Data Source=MACORATI;Initial Catalog=Northwind;Persist Security Info=False;User ID=sa;Data Provider=SQLOLEDB.1;"

strSQL = "EXECUTE CustOrdersOrders QUICK"
Set Rst = conexao.Execute(strSQL)

List1.Clear

While Not Rst.EOF
   List1.AddItem "Código : " & Rst("OrderID") & vbTab & " Data : " & Rst("OrderDate")
   Rst.Movenext
Wend

Rst.Close
conexao.Close
Set Rst = Nothing
Set conexao = Nothing

End Sub

 

 

Nossa próxima etapa será como criar um procedimento armazenado no SQL Server, até lá...

 


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti