0

我正在为我正在处理的应用程序创建一个登录表单。我将我的应用程序设置为正确连接到数据库并在数据库上运行存储过程和查询。

但是我不确定如何将消息从数据库发送到我的 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

这些功能确实可以正常工作,但它们对于错误处理来说是可怕的。

例如,我希望能够设置我的存储过程以登录到应用程序以返回“找不到用户名”或“密码不正确”消息,以便我可以向我的用户准确显示问题所在,如与仅在登录是否通过时仅返回真或假相反仅返回通用的“登录信息不正确”消息。

不幸的是,我不知道如何在任何一端做到这一点。我不知道在 SQL Server 端设置什么让它在过程中吐出消息,而且我不知道在 VB.Net 中接收这些消息很热。

4

1 回答 1

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

当然,密码是用盐散列存储的。

于 2018-09-20T04:05:54.010 回答