La Web del Programador: Comunidad de Programadores
 
    Pregunta:  37687 - COMO RECUPERAR UNA VARIABLE DE SALIDA DESDE UN PROCEDIMIENTO
Autor:  Juan Pablo San Martín
Estimados: mi problema es que cuando ejecuto un procedimiento almacenado el cual devuelve un parametro de salida...no lo puedo recuperar en Visual...como puedo hacer esto?...si me pueden mandar un ejemplillo sería genial.

pdta: mi conexion a SQL server la hago con ADO.

  Respuesta:  Luis Bueno
ok.. un proced almac devuelve datos en un recordset pero lo q tu necesitas es el valor de un para de salida del store. entonces ahi te va creo q es comprendible desde cualquier punto de vista

Public Function ValidaUsuario(psUsuario As String, psNombres As String, piActivo As Integer) As Integer

Dim oCmd As ADODB.Command
Dim oPrm As ADODB.Parameter
Dim msValor As String

Set oCmd = New ADODB.Command

With oCmd
.CommandTimeout = 0
.CommandType = adCmdStoredProc
.CommandText = "sp_ValidaUsuario"
.ActiveConnection = BDSqlServer

Set oPrm = oCmd.CreateParameter("pUsuario", adVarChar, adParamInput, 15, psUsuario)
oCmd.Parameters.Append oPrm

Set oPrm = oCmd.CreateParameter("pNombres", adVarChar, adParamInput, 30, psNombres)
oCmd.Parameters.Append oPrm

Set oPrm = oCmd.CreateParameter("pActivo", adInteger, adParamInput, 4, piActivo)
oCmd.Parameters.Append oPrm

Set oPrm = oCmd.CreateParameter("pExiste", adInteger, adParamOutput)
oCmd.Parameters.Append oPrm

.Prepared = True
.Execute

If IsNull(.Parameters("pExiste")) Then
ValidaUsuario = 0
Else
ValidaUsuario = .Parameters("pExiste")
End If

End With

Set oCmd = Nothing

End Function

''El Store

CREATE PROCEDURE sp_ValidaUsuario
@pUsuario varchar(15),
@pNombres varchar(30),
@pActivo int,
@pExiste int OUTPUT

AS

SET NOCOUNT ON

IF NOT EXISTS(SELECT * FROM ACCESO_SISTEMA WHERE USUARIO IN (SELECT USUARIO WHERE USUARIO=@pUsuario ))
INSERT INTO ACCESO_SISTEMA (USUARIO,CLAVE,NOMBRES,ACTIVO)
VALUES(@pUsuario,@pUsuario,@pNombres,@pActivo)
RETURN 0

GO

Espero te ayude hasta pronto.. bye

  Respuesta:  Gabriel Plana Gavaldà
Creo que lo que buscas viene en la ayuda de Visual Basic.
Este es un ejemplo de como ejecutar el procedimiento almacenado
sp_who, el cual devuelve un parámetro.
Los parámetros de salida son recogidos por el recordset que devuelve el método Execute del objeto ADO Command.

Espero haberte ayudado. Tengo una documentación sobre ASP publicada en esta web. Si te interesa el tema de ASP te agradecería que la miraras y hicieras algún comentario.

Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

cn.Provider = "sqloledb"
cn.Properties("Data Source").Value = "MyServerName"
cn.Properties("Initial Catalog").Value = "pubs"
cn.Properties("Integrated Security").Value = "SSPI"
cn.Open

Cmd.ActiveConnection = cn
Cmd.CommandText = "sp_who"
Cmd.CommandType = adCmdStoredProc

Set rs = Cmd.Execute
Debug.Print rs(0)
rs.Close