【问题标题】:Augmenting membership user creation functionality增强会员用户创建功能
【发布时间】:2017-04-12 19:14:51
【问题描述】:

众所周知,会员创建用户功能缺少很多用户可能需要存储的用户详细信息。我正在展示我的工作,我需要您的专家意见,(我正在使用网络方法)

我目前正在使用此代码(参考 Microsoft)

Public Function GetErrorMessage(status As MembershipCreateStatus) As String

    Select Case status
        Case MembershipCreateStatus.DuplicateUserName
            Return "Username already exists. Please enter a different user name."

        Case MembershipCreateStatus.DuplicateEmail
            Return "A username for that e-mail address already exists. Please enter a different e-mail address."

        Case MembershipCreateStatus.InvalidPassword
            Return "The password provided is invalid. Please enter a valid password value."

        Case MembershipCreateStatus.InvalidEmail
            Return "The e-mail address provided is invalid. Please check the value and try again."

        Case MembershipCreateStatus.InvalidAnswer
            Return "The password retrieval answer provided is invalid. Please check the value and try again."

        Case MembershipCreateStatus.InvalidQuestion
            Return "The password retrieval question provided is invalid. Please check the value and try again."

        Case MembershipCreateStatus.InvalidUserName
            Return "The user name provided is invalid. Please check the value and try again."

        Case MembershipCreateStatus.ProviderError
            Return "The authentication provider Returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator."

        Case MembershipCreateStatus.UserRejected
            Return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator."

        Case Else
            Return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator."
    End Select
End Function

Public Function GetUsrID(UserName) As String
    Dim sql As String = "SELECT UserId FROM aspnet_Users WHERE UserName= @UserName"
    Using cn As New SqlConnection(ARTSQLDBCOM), _
        cmd As New SqlCommand(sql, cn)
        cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 256).Value = UserName
        cn.Open()
        Dim val As String = String.Empty
        Dim getVal As Object = cmd.ExecuteScalar()
        cn.Close()
        If Not IsNothing(getVal) Then
            val = getVal.ToString
            Return val
        Else
            Return Nothing
        End If
    End Using
End Function


Public Function CreateUser_AugmentedUpdate(ByVal UserName As String, ByVal JobTitleID As String, ByVal Prfx As String, ByVal fname As String, ByVal Mname As String, ByVal Lname As String, ByVal Initial As String, _
    ByVal disname As String, ByVal UsrDOB As String, ByVal TelNum As String, ByVal UsrSignature As String, ByVal UsrImg_aURL As String, ByVal UsrImg_rURL As String)
    Try
        Dim UserID As String = GetUsrID(UserName)
        Dim SQLCmd As New SqlCommand()
        SQLCmd.CommandType = CommandType.StoredProcedure
        SQLCmd.CommandText = "aspnet_Users_CreateUser_AugmentedUpdate"
        SQLCmd.Parameters.Add("@UserId", SqlDbType.NVarChar).Value = UserID.ToString
        If (String.IsNullOrEmpty(JobTitleID)) Then
            SQLCmd.Parameters.Add("@JobTitleID", SqlDbType.Int).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@JobTitleID", SqlDbType.Int).Value = Convert.ToInt32(JobTitleID)
        End If
        If (String.IsNullOrEmpty(Initial)) Then
            SQLCmd.Parameters.Add("@Initial", SqlDbType.Int).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@Initial", SqlDbType.Int).Value = Convert.ToInt32(Initial)
        End If
        If (String.IsNullOrEmpty(Prfx)) Then
            SQLCmd.Parameters.Add("@Prfx", SqlDbType.Int).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@Prfx", SqlDbType.Int).Value = Convert.ToInt32(Prfx)
        End If
        If (String.IsNullOrEmpty(fname)) Then
            SQLCmd.Parameters.Add("@fname", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@fname", SqlDbType.NVarChar).Value = fname.ToString
        End If

        If (String.IsNullOrEmpty(Mname)) Then
            SQLCmd.Parameters.Add("@Mname", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@Mname", SqlDbType.NVarChar).Value = Mname.ToString
        End If
        If (String.IsNullOrEmpty(Lname)) Then
            SQLCmd.Parameters.Add("@Lname", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@Lname", SqlDbType.NVarChar).Value = Lname.ToString
        End If
        If (String.IsNullOrEmpty(disname)) Then
            SQLCmd.Parameters.Add("@disname", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@disname", SqlDbType.NVarChar).Value = disname.ToString
        End If

        Dim dateValue As Date
        If String.IsNullOrWhiteSpace(UsrDOB) Then
            SQLCmd.Parameters.Add("@UsrDOB", SqlDbType.Date).Value = DBNull.Value
        ElseIf Date.TryParse(UsrDOB, dateValue) Then
            SQLCmd.Parameters.Add("@UsrDOB", SqlDbType.Date).Value = dateValue
        Else
            SQLCmd.Parameters.Add("@UsrDOB", SqlDbType.Date).Value = DBNull.Value
        End If

        If (String.IsNullOrEmpty(TelNum)) Then
            SQLCmd.Parameters.Add("@TelNum", SqlDbType.NChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@TelNum", SqlDbType.NChar).Value = TelNum.ToString
        End If
        If (String.IsNullOrEmpty(UsrSignature)) Then
            SQLCmd.Parameters.Add("@UsrSignature", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@UsrSignature", SqlDbType.NVarChar).Value = UsrSignature.ToString
        End If
        If (String.IsNullOrEmpty(UsrImg_aURL)) Then
            SQLCmd.Parameters.Add("@UsrImg_aURL", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@UsrImg_aURL", SqlDbType.NVarChar).Value = UsrImg_aURL.ToString
        End If
        If (String.IsNullOrEmpty(UsrImg_rURL)) Then
            SQLCmd.Parameters.Add("@UsrImg_rURL", SqlDbType.NVarChar).Value = DBNull.Value
        Else
            SQLCmd.Parameters.Add("@UsrImg_rURL", SqlDbType.NVarChar).Value = UsrImg_rURL.ToString
        End If
        SQLCmd.Connection = ARTSQLCON
        ARTSQLCON.Open()
        SQLCmd.ExecuteNonQuery()
        ARTSQLCON.Close()
        Return "User has been Created Successfully"
    Catch
        Return "Create User Phase 2 Error. Please refer to your database developer"
    End Try
End Function

<WebMethod()> _
Public Function RegNewUser(ByVal Username As String, ByVal Password As String, ByVal Email As String, ByVal JobTitleID As String, ByVal Prfx As String, ByVal fname As String, ByVal Mname As String, ByVal Lname As String, ByVal Initial As String, _
    ByVal disname As String, ByVal UsrDOB As String, ByVal TelNum As String, ByVal UsrSignature As String, ByVal UsrImg_aURL As String, ByVal UsrImg_rURL As String) As String
    Dim status As MembershipCreateStatus
    'Dim passwordQuestion As String = ""
    'Dim passwordAnswer As String = ""

    'If Membership.RequiresQuestionAndAnswer Then
    '    passwordQuestion = PasswordQuestionDDl.Text.Trim()
    '    passwordAnswer = PasswordAnswerTextbox.Text
    'End If
    Try
        Dim newUser As MembershipUser = Membership.CreateUser(Username, Password, Email, Nothing, Nothing, False, status)
        If newUser Is Nothing Then
            Return GetErrorMessage(status)

        Else
            CreateUser_AugmentedUpdate(Username, JobTitleID, Prfx, fname, Mname, Lname, Initial, _
    disname, UsrDOB, TelNum, UsrSignature, UsrImg_aURL, UsrImg_rURL)
            Return "User has been Created Successfully" + JobTitleID
        End If
    Catch
        Return "Create User Phase 1 Error. Please refer to your database developer"
    End Try


End Function

现在,在这段代码后面,我在 asp users 表上放置了一个触发器,以将新的 userID 插入到另一个表中。我的 SQL 存储过程(aspnet_Users_CreateUser_AugmentedUpdate)在新表上运行记录更新,

代码运行良好,但这是一个好习惯吗?

谢谢

【问题讨论】:

    标签: asp.net sql-server vb.net triggers asp.net-membership


    【解决方案1】:

    您的实现是正确的,因为我们无法在 Membership Provider 中使用 Transaction

    在调用Membership.CreateUser 之前,您需要确保用户输入了有效数据。因此,我将在该行之前进行某种类型的验证。否则,您将得到悬空数据。


    只是一个与会员无关的小改进。如果您将超过 3 个参数传递给一个方法,您可能需要考虑使用 object. 您可以在Clean Code by Robert C. Martin 阅读更多内容。

    Public Function CreateUser_AugmentedUpdate(ByVal user As UserModel) 
    

    您可以使用三元运算符来缩短 if 语句。

    SQLCmd.Parameters.Add("@TelNum", SqlDbType.NChar).Value = 
       If(String.IsNullOrEmpty(TelNum), DBNull.Value, TelNum.ToString)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2015-07-21
      • 2010-11-19
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      相关资源
      最近更新 更多