2017-04-12 75 views
0

正如其众所周知的成员创建用户功能缺少了不少用户的详细信息,有人可能需要存储。我提出我的工作围绕它,我需要你的专家意见,(我用网络方式)我米目前正在使用此代码(参考微软)增广会员用户创建功能

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用户表上触发,以将新的用户ID插入到不同的表中。我的SQL存储过程(aspnet_Users_CreateUser_AugmentedUpdate)对新表运行记录更新,

代码精美的作品,但它是一个好的做法呢?

感谢

回答

1

你的实现是正确的,因为我们不能在成员资格提供使用交易

您将需要确保用户呼叫Membership.CreateUser之前进入有效数据。所以我会在该行之前进行一些类型的验证。否则,你会以摇晃的数据结束。


只是一个小的改进,它与会员无关。如果你向一个方法传递3个以上的参数,你可能要考虑使用对象。 您可以通过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)