Получение ошибки с возвращаемым значением SQL (отсутствует параметр) - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь запрограммировать соединение между моей базой данных SQL и приложением VB.Net.Я хотел бы настроить хранимые процедуры в моей базе данных таким образом, чтобы при возникновении ошибок запроса я мог передать некоторую информацию о том, что не так с запросом, обратно пользователю приложения VB.Net.

Чтобы установитьЯ попытался собрать простую маленькую процедуру «Вход в систему», а также код для запуска на VB.

Процедура SQL:

CREATE PROCEDURE dbo.AuthenticateLogin(
    @Username VARCHAR(100),
    @Password VARCHAR(100),
    @response NVARCHAR(500) OUTPUT
)AS
BEGIN
    DECLARE @UserID INT
    IF(EXISTS(SELECT username FROM users WHERE username = @Username))
    BEGIN
        SET @UserID = (SELECT users_id FROM users WHERE username = @Username AND user_password = @Password)
        IF @UserID IS NULL
            SET @response = 'Incorrect Password'
        ELSE
            SET @response = 'Success'
    END
    ELSE
        SET @response = 'Invalid Login'
END
GO

Код VB.Net:

Public Function AuthenticateLogin(ByVal username As String, ByVal password As String) As Boolean
    Dim CMD As New SqlCommand("AuthenticateLogin")
    CMD.Parameters.Add("@UserName", SqlDbType.VarChar).Value = username
    CMD.Parameters.Add("@Password", SqlDbType.VarChar).Value = password
    AuthenticateLogin = ExecuteCMDWithReturnValue(CMD)
End Function

Public Function ExecuteCMDWithReturnValue(ByRef CMD As SqlCommand) As Boolean
    Try
        OpenDBConnection()
        CMD.Parameters.Add("@response", SqlDbType.NVarChar).Direction = ParameterDirection.ReturnValue
        CMD.Connection = DB_CONNECTION
        CMD.CommandType = CommandType.StoredProcedure
        CMD.ExecuteNonQuery()
        Dim result As Object = CMD.Parameters("@response").Value
        Return If(Convert.ToInt32(result) = 1, False, True)
    Catch ex As Exception
        Throw New Exception("Database Error: " & ex.Message)
        Return False
    Finally
        CloseDBConnection()
    End Try
End Function

Теперь, когда я запускаю приложение, я получаю исключение при попытке запустить мой метод AuthenticateLogin().Я получаю сообщение об ошибке:

"Процедура или функция AuthenticateLogin ожидает параметр'response ', который не был предоставлен."

Я не понимаюпочему я получаю эту ошибку, потому что я поставляю ее в коде VB.Net.Я попытался запустить это через отладчик, и строка специально выдает исключение в:

CMD.ExecuteNonQuery()

Так что же я делаю здесь неправильно, и как я могу исправитьэто?

РЕДАКТИРОВАТЬ: Случайно был введен неправильный код в том месте, где выдается исключение.

1 Ответ

0 голосов
/ 03 октября 2018

Вы должны использовать другое Направление, так как это выход, а не возвращаемое значение.

CMD.Parameters.Add("@response", SqlDbType.NVarChar).Direction = ParameterDirection.Output
...