Получать сообщения из хранимой процедуры SQL в VB.Net

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

Однако я не уверен, как отправлять сообщения из базы данных в мое приложение VB.Net. Прямо сейчас у меня есть два метода, которые выполняют код для моей базы данных:

Public Function ExecuteCMD(ByRef CMD As SqlCommand) As DataTable
    Dim DS As New DataSet()
    Try
        OpenDBConnection()
        CMD.Connection = DB_CONNECTION
        If CMD.CommandText.Contains(" ") Then
            CMD.CommandType = CommandType.Text
        Else
            CMD.CommandType = CommandType.StoredProcedure
        End If
        Dim adapter As New SqlDataAdapter(CMD)
        adapter.SelectCommand.CommandTimeout = 300
        adapter.Fill(DS)
    Catch ex As Exception
        Throw New Exception("Database Error: " & ex.Message)
    Finally
        CloseDBConnection()
    End Try
    Return DS.Tables(0)
End Function

Public Function ExecuteCMDWithReturnValue(ByRef CMD As SqlCommand) As Boolean
    Try
        OpenDBConnection()
        CMD.Connection = DB_CONNECTION
        CMD.Parameters.Add("@ret", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
        CMD.CommandType = CommandType.StoredProcedure
        CMD.ExecuteNonQuery()
        Dim result As Object = CMD.Parameters("@ret").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

Эти функции, честно говоря, работают нормально, но они ужасны для обработки ошибок.

Например, я хотел бы иметь возможность настроить процедуру хранения для входа в приложение, чтобы оно возвращало сообщение "Имя пользователя не найдено" или "Неверный пароль", чтобы я мог точно показать своему пользователю, в чем проблема, как вместо того, чтобы просто возвращать универсальное сообщение "Неправильная информация для входа в систему", возвращая только true или false при входе в систему или нет.

Я, к сожалению, не знаю точно, как это сделать с обеих сторон. Я не знаю, что настроить на стороне SQL Server, чтобы он выкладывал сообщения в процедурах, и я не знаю, как получать эти сообщения в VB.Net.

1 ответ

Решение

Вы можете подтвердить свое право пользователя в VB. Я не думаю, что будет хорошей идеей сообщить пользователю, если пароль или имя пользователя неверны (или если оба неверны). Если эти данные защищены паролем, то они должны быть защищены от вредоносных входов в систему. Это поможет хакеру узнать, что случилось.

Private Function VerifyPassword(pword As String, uname As String) As Boolean
    Using cn As New SqlConnection(My.Settings.UsersConnectionString)
    Dim cmd As New SqlCommand("Select Count(*) From Users Where UserName = @UserName And UserPassword = @Password;", cn)
    cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 100).Value = uname
    cmd.Parameters.Add("@Password", SqlDbType.VarChar, 100).Value = pword

        Try
            cn.Open()
            Dim i As Integer = CInt(cmd.ExecuteScalar())
            If i > 0 Then Return True
            Return False
        Catch ex As Exception
            Throw
        Finally
            cn.Close()
            cmd.Dispose()
        End Try
    End Using
End Function

Конечно пароль хранится в хеше с солью.

Другие вопросы по тегам