Я пытаюсь запрограммировать соединение между моей базой данных 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()
Так что же я делаю здесь неправильно, и как я могу исправитьэто?
РЕДАКТИРОВАТЬ: Случайно был введен неправильный код в том месте, где выдается исключение.