2017-04-12 77 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)