Установка переменной ByRef для сохраненного значения pro c в vb.net - PullRequest
0 голосов
/ 27 января 2020

Ниже приведена функция, которую я имею в VB, которая будет запускать сохраненный pro c. Сохраненный pro c имеет 2 выходных параметра. Один называется @Success, а другой - @Message.

Я пытаюсь установить параметры успеха и сообщения в значения соответствующих выходных параметров из сохраненного параметра c. Я не знаю много о VB. NET. Как я могу добиться этого, основываясь на функции, которую я сейчас написал?

Public Function InvalidateCertificate(ByVal context As DbContextBase,
                                      ByVal certificateId As System.String,
                                      ByRef success As System.Boolean,
                                      ByRef message As System.String) As Int32

    Dim successParameter As New SqlParameter("@Success", success) With {.Direction = ParameterDirection.InputOutput, .Value = success}
    Dim messageParameter As New SqlParameter("@Message", message) With {.Direction = ParameterDirection.InputOutput, .Value = message}

    Dim parameters() As SqlParameter = {New SqlParameter("@CertificationValue", certificateId), successParameter, messageParameter}

    Dim results As Int32 = context.ExecuteProcedure("Orders.spInvalidateCertificate", parameters)

    success = DirectCast(successParameter.Value, System.Boolean)
    message = DirectCast(messageParameter.Value, System.String)

    Return 0
End Function

Stored pro c:

ALTER PROCEDURE [Orders].[spInvalidateCertificate] 
-- Add the parameters for the stored procedure here
 @CertificationValue VARCHAR(20), 
 @Success BIT OUTPUT,
 @Message VARCHAR(50) OUTPUT
AS
BEGIN 
   -- SET NOCOUNT ON added to prevent extra result sets from
   -- interfering with SELECT statements.
   SET NOCOUNT ON;

   -- Log the call to this procedure
   EXEC [Logs].[spLogStoredProcedureCall] @@PROCID;

   --Check to see if CertificationValue exists or is invalid
   IF(select CertificationValue from 
   [Certificate].CertificateOrderDetailImageXref where CertificationValue = 
   @CertificationValue) is null
   BEGIN
       SET @Success = 0
       SET @Message = 'Certification does not exist or is already 
   invalidated.'
   END
   ELSE
   BEGIN
        -- Insert statements for procedure here
       UPDATE Certificate.CertificateOrderDetailImageXref
       SET CertificationValue = CONCAT(@CertificationValue,'-VOID')
       WHERE CertificationValue = @CertificationValue

       SET @Success = 1
       SET  @Message = 'Success, certification has been invalidated.' 
   END;
END
GO

Заметьте, что на самом деле происходит только то, что только первый письмо из сообщения возвращается. так что если это успех, и вывод sql должен быть "успех!" Я просто получаю "S". Если сертификации не существует, я просто получаю «C».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...